2013-09-11 108 views
3

全新的Python,第一次海報,請容易我! 我想在當前文件夾內的特定擴展名的所有文件中插入一行文本(在本例中爲.mod)。如果更容易,它可以指向特定的文件夾。如何用Python腳本修改文件夾中的所有文本文件

下面是我複製和修改的東西,它正在做我需要的一個特定文件,關於替換坐在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'的命令行中調用腳本,這對我不起作用。任何幫助,將不勝感激。

回答

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

謝謝!似乎工作 – user2480255

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

你可以這樣做:

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

然後你就可以得到的文件列表與EXTE nsion'.mod',你可以爲所有文件運行你的函數。

相關問題