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

时间:2013-09-11 01:58:10

标签: python

全新的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 个答案:

答案 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)