遍历目录中的所有文件并查找和替换文本-Python

本教程将介绍遍历目录中的所有文件并查找和替换文本-Python的处理方法,这篇教程是从别的地方看到的,然后加了一些国外程序员的疑问与解答,希望能对你有所帮助,好了,下面开始学习吧。

遍历目录中的所有文件并查找和替换文本-Python 教程 第1张

问题描述

Baby全新的。这是科学怪人从几个类似的主题中总结出来的,似乎没有一个主题涵盖在文件循环中嵌套查找和替换的必要步骤。

我正在尝试迭代特定类型(这里列为‘.LIC’)文件夹(不是递归的,我只有一个文件夹级)中的每个文件,并替换一小段文本。以下是我所能做到的最接近的情况:

import glob, os, fileinput
from glob import glob
root_dir = r"myPath"
os.chdir(root_dir)
 for file in glob, glob('*.LIC'):
 filename = str(file)
 with fileinput.FileInput(filename, inplace=True, backup='.bak') as file:
  for line in file:
print(line.replace('findText', 'replaceText'),  end='')

正如您可以想象的那样,这一切进行得很顺利。错误代码放在下面。

OSError  Traceback (most recent call last)
<ipython-input-61-e2fd0e9a5df9> in <module>()
6  filename = str(file)
7  with fileinput.FileInput(filename, inplace=True, backup='.bak') as file:
----> 8for line in file:
9 print(line.replace('findText', 'replaceText'), end='')
  10 

C:UsersMeAnaconda3libfileinput.py in __next__(self)
 246  def __next__(self):
 247while True:
--> 248 line = self._readline()
 249 if line:
 250  self._filelineno += 1

C:UsersMeAnaconda3libfileinput.py in _readline(self)
 333pass
 334  # The next few lines may raise OSError
--> 335  os.rename(self._filename, self._backupfilename)
 336  self._file = open(self._backupfilename, self._mode)
 337  try:

OSError: [WinError 123] The filename, directory name, or volume label syntax is incorrect: '<function glob at 0x00000000013D3400>' -> '<function glob at 0x00000000013D3400>.bak'

我认为我的问题是嵌套对‘file’的引用,但我不确定怎么解决此问题。

提前感谢您的帮助。

推荐答案

您应该循环glob的结果,而不是函数对象glob的元组:

for filename in glob('*.LIC'):
 with fileinput.FileInput(filename, inplace=True, backup='.bak') as file:
  for line in file:
print(line.replace('findText', 'replaceText'),  end='')

好了关于遍历目录中的所有文件并查找和替换文本-Python的教程就到这里就结束了,希望趣模板源码网找到的这篇技术文章能帮助到大家,更多技术教程可以在站内搜索。