gpt4 book ai didi

python regex - 如何将一个组从一个 txt 文件替换为另一个组从另一个 txt 文件?

转载 作者:行者123 更新时间:2023-11-28 17:14:26 28 4
gpt4 key购买 nike

所以,我有以下 txt 文件:

test1.txt(都在同一行)

(hello)(bye)

text2.txt(分两行。)

(This actually works)
(Amazing!)

我有以下正则表达式模式

\((.*?)\)

这显然选择了括号内的所有单词。

我想做的是把test1.txt中()里面的字替换成test2.txt中()里面的字,这样test1.txt就变成了:

(This actually works)(Amazing!)

我尝试了下面的代码,但它似乎不起作用。我做错了什么?

import re

pattern = re.compile("\((.*?)\)")

for line in enumerate(open("test1.txt")):
match = re.finditer(pattern, line)

for line in enumerate(open("test2.txt")):
pattern.sub(match, line)

我想我犯了一个很大的错误,这是我第一个用 python 编写的程序。

最佳答案

好了,有几个问题:

  1. finditer 方法返回匹配对象,而不是字符串。findall 返回匹配的字符串组列表
  2. 你反其道而行之。你想用 test2 中的数据替换 test1 中的数据吗?
  3. enumerate 返回一个元组,因此您的 var line 不是一行,而是 [line_number, line_string_content] 的列表。我在最后一个代码块中使用它。

所以可以先尝试抓取内容:

pattern = re.compile("\((.*?)\)")
for line in open("test2.txt"):
match = pattern.findall(line)
#match contains the list ['Amazing!'] from the last line of test2, your variable match is overwritten on each line of the file...

注意:如果你编译你的模式,你可以使用它作为对象来调用 re 方法。

如果你想一行一行地做(大文件?)。
另一种选择是加载整个文件并创建多行正则表达式。

matches = []
for line in open("test2.txt"):
matches.extend(pattern.findall(line))
#matches contains the list ['This actually works','Amazing!']

然后用你匹配的项替换括号中的内容:

for line in open("test1.txt"):
for i, match in enumerate(pattern.findall(line)):
re.sub(match, matches[i], line)

注意:如果 test1.txt 中的 (string in parenthesis) 比 test2.txt 中的多,这样做会引发异常...

如果你想写一个输出文件你应该做

with open('fileout.txt', 'w') as outfile:
for line in enumerate(open("test1.txt")):
#another writing for the same task (in one line!)
newline = [re.sub(match, matches[i], line) for i, match in enumerate(pattern.findall(line))][0]
outfile.write(newline)

关于python regex - 如何将一个组从一个 txt 文件替换为另一个组从另一个 txt 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45194499/

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