【问题标题】:Scan data from a list of strings in linux从linux中的字符串列表中扫描数据
【发布时间】:2026-02-02 06:30:01
【问题描述】:

我有两个文件:

  • file_a = 字符串列表
  • file_b = data {或 file_b 可能是所有这些文件所在的目录}

完成以下任务的最佳选择是什么:

{save output} 扫描并显示在 file_b 中找到的所有行,其中包含在 file_a 中找到的 @ 至少 1 个字符串。

例如 file_a 包含以下字符串(在我的情况下,列表很长)

01101

11001

11101

文件_b

01101:11100:10001

11111:11100:10001

01111:11100:11001

11101:11111:11110

基于此示例,第 1 行第 3 行和第 4 行确实包含字符串

【问题讨论】:

  • 您可以首先扫描 file_a 并将其存储在一个列表中(或哈希以获得更好的查找性能),然后遍历 file_b 并检查每一行是否包含在列表中,到目前为止您有什么?
  • 到目前为止一直在使用 python / pickle 脚本来完成该任务,但有点坚持如何从该列表中提取这些字符串
  • 这是一个简单的if element in list 语句,例如if 'a' in ['a','b'.c'],发布您的代码并提供足够的输入和所需的输出,更多的人可以来帮助...

标签: python linux unix


【解决方案1】:

您可以使用open 方法中的文件句柄的readlines() 方法读取两个文件的行,并遍历每一行以查找file_a 的字符串是否与line_b 中的字符串相交。 由于您没有向我们提供有关您的文件格式以及到目前为止所做的工作的更多信息,因此我将仅提供一个伪代码。

with open('file_a','r') as f1:
    strings=f1.readlines()  #note I suppose each string is on one line

with open('file_b','r') as f2:
    lines=f2.readlines()

# iterate to find intersection of strings in line
for line in lines:
    tmp=line.strip()
    print list(set(strings) & set(line))

请参阅Find intersection of two nested lists? 了解 2 个列表的交集

【讨论】:

  • 感谢您的回复。查找两个嵌套列表的交集对于这个小任务来说太复杂了。基本上,一直在运行一些代码来运行 egrup 并且它工作得很好。
  • @EnrikShaumann 确实可以很方便地找到两个嵌套列表的交集。正如@shahaf 在他的评论中所说,您可以使用if 条件以不太优化的方式进行操作。
  • @EnrikShaumann 如果我的回答对您有帮助,您可以考虑接受它以便关闭问题。
  • 查找两个嵌套列表的交集,对此进行了广泛的研究,如果您对此有任何有用的链接,请抛出一些。再次感谢您的帮助
  • @EnrikS 抱歉回复晚了(我暂时离开了)。交叉点主要基于排序和过滤算法。通过对可迭代对象的简单循环,您可以做到这一点。不同算法之间通常变化的是计算成本(递归算法往往更快)。你可以看看thisthis