使用文本文件的每一行中的另一个字符更改第n个字符的出现次数

时间:2017-07-26 19:47:13

标签: python python-3.x

我有一个文本文件Text.txt,其中每一行看起来像这样:

1, 2, 3, 4, name.docx, , 5, 6, 7

数字从一行变为下一行,但不是name.docx(是的,名称和5之间的空格是故意的)。 我想要将第五个逗号(即“name.docx”之后的一个)更改为另一个字符,即“@” - 但我需要为每一行执行此操作。怎么可能这样做?

注意:我知道对于某些字符串,这样的东西可用于将某行中某个字符的第n个出现更改为另一个字符串(在本例中为逗号“@”):

re.sub(r'^((.*?,.*?){n}),', r'\1@', mystring)

但是我不知道将这个应用到所有行的最有效方法。

2 个答案:

答案 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] 
相关问题