2017-04-24 88 views
0

我是Python的新用戶。我需要學習一種在單個文件中改變參數值的方法。該腳本:如何使用python更改多個文件中參數的值

#####test.py########## 
from sys import argv 
script,filename,sigma = argv 
file_data = open(filename,'r') 
txt = file_data.read() 
txt=txt.replace('3.7',sigma) 
file_data = open(filename,'w') 
file_data.write(txt) 
file_data.close() 

它在命令行中運行帶有的test.txt作爲

test.py test.txt 2. 

3.7由2 test.txt的替代,作爲一個結果。

現在,如果我想要對目錄中的所有.txt文件執行相同操作,例如

test.py *.txt 2 

有什麼建議的修改?

您的建議非常感謝。

Hafiz。

+0

您的意思是'差=的argv [2]'?要列出所有文本文件,您可以使用glob模塊。 '從glob導入glob'然後'在glob中輸入文件名('path/to/directory/*。txt'):'。 – tdelaney

+0

是的,sigma = argv [2]。實際上,當我運行它時,我想將參數傳遞給腳本。我試圖整合你的建議。它出來是:來自sys導入的 argv 腳本,文件名,sigma = argv from glob import glob for glob('C:\ PROJ \ BNS \ python-files \ *。txt'): file_data =開放(文件名, 'R') TXT = file_data.read() TXT = txt.replace( '3.7',SIGMA) file_data =開放(文件名, 'W') file_data.write(TXT) file_data .close()但是當我運行這個像test.py * .txt 2時,它顯示語法錯誤。請建議。 – Hafiz

+0

好吧,它的工作。我可以弄明白。日Thnx – Hafiz

回答

0

的bash(或任何你的shell是),將它傳遞給你的python腳本之前擴大*.txt(以test0.txt test1.txt ...或任何在您的當前目錄下的*.txt文件的稱呼)。你的python腳本會因此得到很多參數(而不僅僅是你期望的)。打印sys.argv進行檢查。

,你可以解決在bash本身的東西,如

for name in *.txt; do test.py ${name} 2; done 

否則你就需要在python區別對待sys.argv,並允許超過2個參數。

0

導入glob解決了這個問題。但我有一些疑問。

查詢1:

我重寫我的代碼爲:

#####test.py########## 
from sys import argv 
script,filename,sigma = argv 
file_data = open(filename,'r') 
txt = file_data.read() 
txt=txt.replace('3.7'|'3',sigma) #gives syntax error 
file_data = open(filename,'w') 
file_data.write(txt) 
file_data.close() 

我想由Sigma更換3.7或3。什麼是正確的代碼?

查詢2:

我重寫它以下列方式:

#####test.py########## 
from sys import argv 
script,filename,sigma = argv 
file_data = open(filename,'r') 
txt = file_data.read() 
txt=txt.replace('x="2"','x=sigma') 
file_data = open(filename,'w') 
file_data.write(txt) 
file_data.close() 

隨着

py test.py test.txt 3. 

我得到X =西格瑪,但我想X = 3

這是什麼修改?

問候,

哈菲茲

相關問題