gpt4 book ai didi

python - 使用正则表达式替换文件中的单词

转载 作者:行者123 更新时间:2023-12-01 07:00:18 25 4
gpt4 key购买 nike

我有一个包含超过 40k 行的文件,我需要在其中使用正则表达式替换单词和行。我无法独自完成它。假设文件如下所示:

test >
test >
test >
test >
def start():
file = input("file: ")
fread = open(file, "r")
linelist = fread.readlines()
fread.close()
fwrite = open(file, "w")
line = re.sub(".*(?=>)", " ", str(linelist))
fwrite.write(line)
fwrite.close()


start()

但是不要删除测试并给我:

>
>
>

它给了我

  >\n']

没有其他行

最佳答案

linelist 是一个 list,您将其转换为字符串,导致 re.sub 删除最后一个 > 之前的所有内容\n]。当您在列表上运行 str 时,您会得到例如:

In [1]: str([1, 2])
Out[1]: '[1, 2]'

这是主要问题。您需要的是迭代列表并分别对每一行进行操作并保存修改后的行。

但是有一个比在文件对象上执行 spiltlines 来获取单个列表上的所有行更好的方法;由于您的文件很大,这会产生巨大的内存成本。

此外,我建议您在对文件的每一行进行操作然后写回同一文件时,使用单独的文件进行读取和写入。如果您必须使用同一个文件,我将使用单独的文件,然后在操作完成后将读取文件替换为写入文件。

所以总的来说,更好的方法是迭代文件对象(因为它是一个迭代器)并执行操作:

with open('input_file') as in_file, open('output_file', 'w') as out_file:
for line in in_file:
modified_line = re.sub(r'^.*(?=>)', ' ', line)
out_file.write(modified_line)

open 是一个上下文管理器,因此您可以在其上使用 with statememnt,它还有在文件对象上调用 close 的额外好处,因此您无需手动关闭它们。

如果您的模式与示例中所示的方式完全相同,您可以使用str.replace,不需要正则表达式:

modified_line = line.replace('test ', ' ')

关于python - 使用正则表达式替换文件中的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58666068/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com