【问题标题】:Replace string at index in multiple files替换多个文件中索引处的字符串
【发布时间】:2018-10-18 07:45:01
【问题描述】:

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

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- 123456XXXXXX6 替换(9:14 是我文件中的真正边界)

如何修复这个脚本?

【问题讨论】:

    标签: python python-3.x io


    【解决方案1】:

    要进行替换,只需编写:

    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 不要添加自己的字符,否则我们会在每行之间添加一个空行文件的行。

    【讨论】:

    • 然后我使用 [9:15],但我仍然将整个文件替换为该行
    • @gyc 那是因为您没有打印任何其他行。您只是打印要替换的那个。使用else:
    • 对,这可行,但它会插入额外的回车符(我在某处读到我需要使用 end=something 作为参数来打印
    • @gyc print(line, end="")print(line[:-1])。遍历文件的行将新行保留在末尾;一个让很多很多人感到恼火的决定。删除它们可能也会惹恼很多很多人,所以就是这样。
    猜你喜欢
    • 2020-07-26
    • 2011-10-20
    • 1970-01-01
    • 2018-02-21
    • 2019-01-07
    • 1970-01-01
    • 2014-03-31
    相关资源
    最近更新 更多