从文本文件中提取部分匹配另一fi中列出的关键字的所有行

2024-09-21 00:21:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经用尽了网上搜索,试图找出如何做到这一点。在

我有一个制表符分隔的文件searchfile.txt,有两列和200行。示例如下:

A(H1N1)/SWINE/COTES-DARMOR/388/2009 X?  4.28144245
A(H1N2)/SWINE/SCOTLAND/410440/1994 X?   7.25878836
A(H1)/SWINE/ENGLAND/117316/1986 X?  3.305392038
A(H1)/SWINE/ENGLAND/438207/1994 X?  7.66078717

我有另一个文件keywords.txt,其中一些关键字与searchfile.txt中的id部分匹配:

^{pr2}$

我想从searchfile.txt中提取包含keywords.txt中任何关键字的行

使用其他类似问题的解决方案:

grep -F -f keywords.txt searchfile.txt > selected.txt 

grep -f keywords.txt searchfile.txt

awk 'FNR==NR {a[$0];next} ($NF in a)' keywords.txt searchfile.txt > result.txt

我还通过这个python脚本完成了部分工作:

infile = r"/path/to/searchfile.txt"

results = []
to_keep = ["ENGLAND/117316",
            "DARMOR/388",
            "438207"]

with open(infile) as f:
    f = f.readlines()

for line in f:
    for phrase in to_keep:
        if phrase in line:
            results.append(line)
            break

print(results)

它在终端窗口中输出:

[
    'A(H1N1)/SWINE/COTES-DARMOR/388/2009 X?\t4.28144245\n',   
    'A(H1)/SWINE/ENGLAND/117316/1986 X?\t3.305392038\n', 
    'A(H1)/SWINE/ENGLAND/438207/1994 X?\t7.66078717\n'
]

有办法吗

a)修改此脚本以从keywords.txt这样的文件中读取并将行输出到另一个文件?(我的python技能还达不到这个水平)

或者

b)使用grepawksed。。。这样做

我认为问题是我的关键字不是完全独立的单词,必须部分匹配searchfile.txt中的内容。在

感谢您的帮助!谢谢。在


Tags: 文件tointxtline关键字h1grep
1条回答
网友
1楼 · 发布于 2024-09-21 00:21:39

这在python中相当简单。假设您有keywords.txtinput.txt文件,并希望输出到output.txt

# 1
with open('keywords.txt', 'r') as k:
    keywords = k.read().splitlines()

results = []

#2
with open('input.txt') as f, open('output.txt', 'w') as o:
    for line in f:
        if any(key in line for key in keywords):
            o.writelines(line)

这将读取keywords文件,并将其中的每一行存储在一个列表中(#1)。然后打开输入和输出文本文件,逐行循环输入文件,如果在行中找到任何关键字(#2),则写入输出文件。在

相关问题 更多 >

    热门问题