处理在Python中传递参数的文本文件

时间:2017-04-29 08:34:04

标签: python-2.7

查询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

修改是什么?

非常感谢您的意见/反馈。

哈菲兹。

1 个答案:

答案 0 :(得分:0)

我认为不可能将替换用于或声明。

我将展示两种可以快速解决此问题的方法:

  1. 只需调用两次替换语句
  2. 使用正则表达式
  3. 我自己创建了一个虚拟的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

    祝你好运!