3

全新的 Python,第一次发帖,请放轻松!我想将一行文本插入到.mod当前文件夹中特定扩展名(在示例中为 )的所有文件中。如果这更容易,它可以指向一个特定的文件夹。

下面是我复制和修改的东西,它完全符合我对一个特定文件的需要,完全不需要用 SIT 替换坐的部分,但如果我删除它,程序就不起作用。我不知道为什么会这样,但我可以忍受。

import sys, fileinput

for i, line in enumerate(fileinput.input('filename.mod', inplace=1)):  
    sys.stdout.write(line.replace('sit', 'SIT'))    
    if i == 30: sys.stdout.write('TextToInsertIntoLine32' '\n') #adds new line and text to line 32  

我的问题是,如何为目录中的所有文件运行它?我尝试用对我不起作用sys.argv[1]的命令行替换文件名并调用脚本。'*.mod'任何帮助,将不胜感激。

4

4 回答 4

2

你可以这样做:

import os
folder = '...'   # your directory
files = [f for f in os.listdir(folder) if f.endswith('.mod')]

然后你可以得到一个扩展名为“.mod”的文件列表,你可以为所有文件运行你的函数。

于 2013-09-11T02:10:01.013 回答
1

您可以使用glob.glob列出当前工作目录中文件名以 结尾的所有文件.mod

import fileinput
import glob
import sys

for line in fileinput.input(glob.glob('*.mod'), inplace=True):
    sys.stdout.write(line.replace('sit', 'SIT'))
    if fileinput.filelineno() == 32:
        #adds new line and text to line 32      
        sys.stdout.write('TextToInsertIntoLine32' '\n')
于 2013-09-11T02:09:25.233 回答
1

您可以使用os.walk功能:

for root, dirs, files in os.walk("/mydir"):
    for file in files:
        if file.endswith(".mod"):
             filepath = os.path.join(root, file)
             with open(filepath, 'r', encoding='utf-8') as f:
                 text = f.read()
                 print('%s read' % filepath)
             with open(filepath, 'w', encoding='utf-8') as f:
                 f.write(text.replace('sit', 'SIT'))
                 print('%s updated' % filepath)
于 2018-11-05T15:52:53.473 回答
0

简单:您不必指定文件名。fileinput默认情况下将采用文件名sys.argv。您甚至不必使用enumerate, 作为fileinput每个文件中的行的编号:

import sys, fileinput
for line in fileinput.input(inplace=True):
    sys.stdout.write(line.replace('sit', 'SIT'))
    if fileinput.filelineno() == 30:
        sys.stdout.write('TextToInsertIntoLine32' '\n')
于 2013-09-11T02:04:57.277 回答