在多个文件的索引处替换字符串

时间:2018-10-18 07:45:01

标签: python python-3.x io

我的目录中有一百个文件。它们看起来像

abc def
ghi 123456
xyz

我想将123456更改为XXXXXX 我不能使用正则表达式,因为字符串并不总是相同,但始终位于相同的索引处,并且长度始终相同

我在python 3.7中尝试过的

#!/usr/bin/python
import fileinput
import glob

for filepath in glob.iglob('mydir/*.txt'):
    with fileinput.FileInput(filepath, inplace=True) as file:
        for index, line in enumerate(file):
            if index == 1:
                print(line.replace(line[9:14], "XXXXXX"))

1-这将用修改后的文本替换整个文件

2- 123456替换为XXXXXX6(9:14是文件中的实际边界)

如何修复此脚本?

1 个答案:

答案 0 :(得分:2)

要进行替换,只需编写:

print(line[:9] + "XXXXXX" + line[14:])

不要打扰str.replace;在这种情况下可能会导致意外行为。

原始代码离开6的原因是切片没有包含最终索引。


要打印整个文件,请使用以下代码:

for index, line in enumerate(file):
    if index == 1:
        line = line[:9] + "XXXXXX" + line[14:]
    print(line, end="")

end=""是因为遍历文件中的各行将\n字符保留在每一行的末尾,因此我们需要告诉print不要添加它自己的字符,否则我们会得到文件各行之间的空白行。