我有一个文本文件Text.txt,其中每一行看起来像这样:
1, 2, 3, 4, name.docx, , 5, 6, 7
数字从一行变为下一行,但不是name.docx(是的,名称和5之间的空格是故意的)。 我想要将第五个逗号(即“name.docx”之后的一个)更改为另一个字符,即“@” - 但我需要为每一行执行此操作。怎么可能这样做?
注意:我知道对于某些字符串,这样的东西可用于将某行中某个字符的第n个出现更改为另一个字符串(在本例中为逗号“@”):
re.sub(r'^((.*?,.*?){n}),', r'\1@', mystring)
但是我不知道将这个应用到所有行的最有效方法。
答案 0 :(得分:1)
file_lines = []
with open('your_text_file.txt') as file_obj:
for line in file_obj.readlines():
values = line.strip().split(',')
values[4] += '@' + values[5]
del values[5]
file_lines.append(','.join(values))
with open('your_text_file.txt', 'w') as f:
f.write('\n'.join(file_lines))
答案 1 :(得分:1)
另一种解决方案:
def change_nth_occurrence(x, n, a, b):
"""
Change the n'th occurence of 'a' in x to 'b'.
"""
indices = [i for i, c in enumerate(x) if c == a]
pos = indices[n - 1] # n is 1-based
return x[:pos] + b + x[pos+1:]
用法:
change_nth_occurrence('aaaaa', 2, 'a', 'b')
change_nth_occurrence('1, 2, 3, 4, name.docx, , 5, 6, 7', 5, ',', '@')
# works with lists, but note that 'b' must be given as a list
change_nth_occurrence([1, 1, 1, 1, 1], 3, 1, [2])
结果:
'abaaa'
'1, 2, 3, 4, name.docx@ , 5, 6, 7'
[1, 1, 2, 1, 1]