使用fileinput.input在文件中插入一行

时间:2014-11-09 23:03:42

标签: python

我想在我拥有的文本文件的中间插入一行。

我试过了:

for line in fileinput.input('file.txt', inplace=1):
    if line.startswith('example'):
        print 'input line'

哪个有效。但我希望这可以循环遍历许多文件,因此我将其更改为:

for line in fileinput.input('{0}' .format(file), inplace=1):
    if line.startswith('example'):
        print 'input line'

我收到错误消息:

Traceback (most recent call last):
  File "addline.py", line 8, in <module>
    for line in fileinput.input('{0}' .format(file), inplace=1):
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/fileinput.py", line 253, in next
    line = self.readline()
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/fileinput.py", line 322, in readline
    os.rename(self._filename, self._backupfilename)
OSError: [Errno 2] No such file or directory

我想知道为什么这不起作用,任何修复建议都会受到赞赏。

1 个答案:

答案 0 :(得分:1)

问题似乎在于这一行:

for line in fileinput.input('{0}' .format(file), inplace=1):

改为:

# f is the filename
for line in fileinput.input('{0}'.format(f), inplace=1):

第一个问题,将file更改为其他名称,file是python中的保留名称。

并且,如果您尝试传递多个文件,请确保您传递list个文件名。

尝试更改为:

...
files = ['file1', 'file2', ...] # put your files in a list first
# and pass the list of files to .input
for line in fileinput.input(files, inplace=1):
...