全新的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'
从命令行调用脚本,这对我来说不起作用。任何帮助将不胜感激。
答案 0 :(得分:2)
你可以这样做:
import os
folder = '...' # your directory
files = [f for f in os.listdir(folder) if f.endswith('.mod')]
然后您可以获得扩展名为“.mod”的文件列表,您可以为所有文件运行您的函数。
答案 1 :(得分: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')
答案 2 :(得分: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')
答案 3 :(得分:0)
您可以使用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)