如何使用Python脚本修改文件夹中的所有文本文件

3

我是一名Python新手,第一次发帖,请对我宽容!

我想在当前文件夹内的所有特定扩展名文件(例如.mod)中插入一行文本。如果需要,可以指向特定文件夹。

下面是我复制并修改后的代码,对于一个特定的文件来说它正好做到了我所需求的。但替换“sit”为“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个回答

3
您可以这样做:
import os
folder = '...'   # your directory
files = [f for f in os.listdir(folder) if f.endswith('.mod')]

然后,您可以获取扩展名为“.mod”的文件列表,并针对所有文件运行您的函数。

2
你可以使用 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')

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)

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')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接