gpt4 book ai didi

python - 使用一个文件中的文本在第二个文件中搜索匹配项

转载 作者:行者123 更新时间:2023-11-28 22:05:40 25 4
gpt4 key购买 nike

我在 Linux 上使用 Python 2.6。

我有两个文本文件first.txt 每行都有一个文本字符串。所以它看起来像

洛伦
爱普思
asfd

第二个文件的格式不太一样。它看起来更像这样

1231 定理数
1311 assss 31 1
等等

我想从 first.txt 中提取每一行文本,并确定第二个文本中是否存在匹配项。如果没有匹配项,那么我想将丢失的文本保存到第三个文件中。我想忽略大小写,但并非完全必要。这就是为什么我在看正则表达式但没有太多运气。

所以我打开文件,使用 readlines() 创建一个列表。
遍历列表并打印出匹配项。

这是我的代码

first_file=open('first.txt', "r")
first=first_file.readlines()
first_file.close()

second_file=open('second.txt',"r")
second=second_file.readlines()
second_file.close()

while i < len(first):
j=search[i]
while k < len(second):
m=compare[k]
if not j.find(m):
print m
i=i+1
k=k+1
exit()

绝对不优雅。有人对如何解决这个问题或更好的解决方案有任何建议吗?

最佳答案

我的方法是:读取第二个文件,将其转换为小写,然后创建一个包含其中的单词的列表。然后将此列表转换为 set , 以获得更好的大文件性能。

然后遍历第一个文件中的每一行,如果它(也转换为小写,并删除多余的空格)不在我们创建的集合中,则将其写入第三个文件。

with open("second.txt") as second_file:
second_values = set(second_file.read().lower().split())

with open("first.txt") as first_file:
with open("third.txt", "wt") as third_file:
for line in first_file:
if line.lower().strip() not in second_values:
third_file.write(line + "\n")

集合对象是一种简单的容器类型,它是无序的,不能包含重复的值。它旨在让您快速添加或删除项目,或判断项目是否已在集合中。

with 语句是确保文件关闭的便捷方式,即使发生异常也是如此。从 Python 2.6 开始,它们默认启用,在 Python 2.5 中,它们要求您将行 from __future__ import with_statements 放在文件顶部。

in 操作符听起来像:告诉您是否可以在集合中找到一个值。当与列表一起使用时,它只是像您的代码一样进行迭代,但是当与集合对象一起使用时,它使用散列来执行得更快。 not in 则相反。 (可能的混淆点:in 也用于定义 for 循环(for x in [1, 2, 3]),但是这是无关的。)

关于python - 使用一个文件中的文本在第二个文件中搜索匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4982610/

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