我有一对包含以下数字对的文件:
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"
。
我该如何解决?
答案 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)