我想在新的文本文件中替换文本文件中的数字。我试着用函数字典来解决这个问题,但是现在python也替换了子字符串。
例如:我想将数字014189替换为1489,用此代码也可以将014896替换为1489 -我如何才能摆脱这个问题?谢谢!
replacements = {'01489':'1489', '01450':'1450'}
infile = open('test_fplan.txt', 'r')
outfile = open('test_fplan_neu.txt', 'w')
for line in infile:
for src, target in replacements.iteritems():
line = line.replace(src, target)
outfile.write(line)
发布于 2018-07-11 03:18:09
我不知道您的输入文件看起来是什么样子,但是如果数字被空格括起来,这应该是可行的:
replacements = {' 01489 ':' 1489 ', ' 01450 ':' 1450 '}
发布于 2018-07-11 03:19:13
看起来您需要关心的是,它还修改了将src模式作为子字符串包含的数字。为了避免这种情况,您需要首先定义应该遵守的边界。例如,您是否希望坚持只替换由空格包围的匹配数字?或者可能只是因为没有相邻的数字(或句点或逗号)。由于您可能希望使用正则表达式来约束匹配,正如JoshuaF在另一个答案中所建议的那样,您可能需要避免使用简单的replace函数,而倾向于使用re库中的函数。
发布于 2018-07-11 03:20:30
将regexp与负查找一起使用:
import re
replacements = {'01489':'1489', '01450':'1450'}
def find_replacement(match_obj):
number = match_obj.group(0)
return replacements.get(number, number)
with open('test_fplan.txt') as infile:
with open('test_fplan_neu.txt', 'w') as outfile:
outfile.writelines(
re.sub(r'(?<!\d)(\d+)(?!\d)', find_replacement, line)
for line in infile
)
https://stackoverflow.com/questions/51272513
复制相似问题