2016-08-24 7 views
1

Baby brand new. Это был Франкенштейн вместе с несколькими подобными темами, ни одна из которых, казалось, не охватывала необходимый шаг вложенности поиска и замены внутри файлового цикла.Перебирать все файлы в каталоге и находить и заменять текст - Python

Я пытаюсь выполнить итерацию каждого файла в папке (не рекурсивно, у меня есть только один уровень папок) определенного типа (указанный здесь как .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: 
----> 8   for line in file: 
     9    print(line.replace('findText', 'replaceText'), end='') 
    10 

C:\Users\Me\Anaconda3\lib\fileinput.py in __next__(self) 
    246  def __next__(self): 
    247   while True: 
--> 248    line = self._readline() 
    249    if line: 
    250     self._filelineno += 1 

C:\Users\Me\Anaconda3\lib\fileinput.py in _readline(self) 
    333      pass 
    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' 

Я думаю, что моя проблема заключается в вложении ссылки на «файл», но я не уверен, как это разрешить.

Благодарим за помощь заранее.

+0

Frankenstein'ed вместе - ха-ха-ха :-) –

ответ

2

Вы должны цикл по результату 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='') 
+0

Его живым! Но на самом деле, это сработало чудесно. Спасибо. – DavidU

 Смежные вопросы

  • Нет связанных вопросов^_^