如何在python中只替换文本中的一位数?

时间:2017-06-04 11:57:47

标签: python-3.x text file-io replace

我有一对包含以下数字对的文件:

0,21
0,52
0,464
100,478
1,101
1,729
1,730

我想用" 2000"替换单个" 0" s。预期的输出应为:

2000,21
2000,52
2000,464
100,478
1,101
1,729
1,730

然而,使用我的代码,它将所有0更改为2000s,我最终得到这个输出:

2000,21
2000,52
2000,464
120002000,478
1,120001
1,729
1,732000

我的代码是:

textToSearch = "0"
textToReplace = "2000"
fileToSearch = "example.csv"
with fileinput.FileInput(fileToSearch, inplace=True, backup='.bak') as file:
    for line in file:
        print(line.replace(textToSearch, textToReplace), end='')

另外:我从来不知道逗号左侧会有多少0,因此我无法限制要更改的0的数量。该文件是随机生成的,有时我有12个0,有时只有1个。 我试过这个:

textToSearch = "0,"
textToReplace = "2000,"
fileToSearch = "example.csv"
with fileinput.FileInput(fileToSearch, inplace=True, backup='.bak') as file:
    for line in file:
        print(line.replace(textToSearch, textToReplace), end='')

但是,这次它不适用于"100""200"等数字,因为它们分别为"102000""202000"

我该如何解决?

3 个答案:

答案 0 :(得分:1)

稍作修改,将数据保存到文件中。基本算法没有改变。

import re

temp = []

with open("example.csv", "r") as inputf:
    for line in inputf:
        line = line.strip("\n")
        match = re.search("^0", line)
        if match:
            list1 = line.split(",")
            list1[0] = 2000
            line = str(list1[0]) + "," + str(list1[1])
        temp.append(line)
inputf.close()

# overwrite original file

with open("example.csv", "w") as outputf:
    for item in temp:
        outputf.write(item + "\n")
outputf.close()

答案 1 :(得分:0)

你应该尝试使用"正则表达式"导入重新模块如下。

import re    

fileToSearch = "example.csv"

    with open(fileToSearch) as file:
        for line in file:
            line = line.strip("\n")
            match = re.search("^0", line)
            if match:
                list1 = line.split(",")
                list1[0] = 2000
                line = str(list1[0]) + "," + str(list1[1])
            print(line)

这似乎产生了你想要的结果。

答案 2 :(得分:0)

KISS方法。在玩regexp时,我提出了一个更简单,更简单的解决方案,您可能会考虑使用它。

import re        

with open("example.csv", "r") as inputf:

    randstr = inputf.read()
    regex = re.compile(r"\b0\b")
    result = re.sub(regex, "2000", randstr)

with open("example.csv", "w") as outputf:
    outputf.write(result)