2017-04-24 240 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

这是什么修改?

问候,

哈菲兹

相关问题