查询1: 我有一个.txt文件,我想用2替换两个数字,例如3.7和3.5。这意味着,我需要搜索3.7或3.5并将它们替换为2.我想通过将参数传递给脚本来实现。我可以将其替换为单个数字:
#####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为
python test.py test.txt 2
现在我想用逻辑OR扩展它:
#####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()
上述实现给出了语法错误。
有任何建议的修改吗?
查询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()
使用
python test.py test.txt 3.
我得x = sigma,但我想得到x = 3
修改是什么?
非常感谢您的意见/反馈。
哈菲兹。
答案 0 :(得分:0)
我认为不可能将替换用于或声明。
我将展示两种可以快速解决此问题的方法:
我自己创建了一个虚拟的test.txt文件,并使用了以下两个脚本:
from sys import argv
script, filename, sigma = argv
filename2 = "test2.txt"
with open(filename, 'r') as ft:
txt = ft.read()
txt=txt.replace('3.7', sigma)
txt=txt.replace('3', sigma)
with open(filename2, 'w') as ft:
ft.write(txt)
和
from sys import argv
import re
script, filename, sigma = argv
filename2 = "test2.txt"
with open(filename, 'r') as ft:
txt = ft.read()
txt_new = re.sub(r"3.7|3", sigma, txt)
with open(filename2, 'w') as ft:
ft.write(txt_new)
我已经重写了你的脚本,因为我更喜欢使用
with open(filename, "r") as ft:
txt = ft.read()
与以下内容相同:
file_data = open(filename, "r")
txt = file_data.read()
file_data.close()
但是现在我不必关心记住file_data.close()语句。
请注意,我首先更换3.7,因为如果你第一次更换字符串" 3"比每一个" 3.7"将成为" 2.7"因此更换" 3.7"到2不可能发生。
这也是为什么在正则表达式中我写了r" 3.7 | 3"而不是r" 3 | 3.7"。
请注意,这解决了您的问题,但我不确定您的脚本的更高目的是什么,因此这种方法最终可能不是解决问题的最佳方法。
你的第二个查询失败了,因为你写了
txt=txt.replace('x="2"','x=sigma')
' X =西格玛'被解释为字符串而不是您定义的变量sigma。 要解决这个问题,您可以使用以下内容:
txt=txt.replace('x="2"', 'x=%s' % sigma)
'%s' %variable语句将填充字符串中变量sigma的值。 See this page
祝你好运!