在 Python 中将列表项与大文件中的行进行匹配的最有效方法是什么?

2023-12-20

我有一个大文件(5Gb),名为my_file。我有一个名为my_list。读取文件中每一行的最有效方法是什么,如果来自my_list匹配以下行中的项目my_file,创建一个名为的新列表matches包含以下行中的项目my_file以及来自的项目my_list发生比赛的地方。这是我正在尝试做的事情:

def calc(my_file, my_list)
    matches = []
    my_file.seek(0,0)
    for i in my_file:
        i = list(i.rstrip('\n').split('\t'))
        for v in my_list:
            if v[1] == i[2]:
                item = v[0], i[1], i[3]
                matches.append(item)
    return matches

这是其中的一些行my_file:

lion    4    blue    ch3
sheep   1    red     pq2
frog    9    green   xd7
donkey  2    aqua    zr8

这里有一些项目my_list

intel    yellow
amd      green
msi      aqua    

在上面的示例中,所需的输出(列表的列表)将是:

[['amd', 9, 'xd7'], ['msi', 2, 'zr8']]

我的代码目前可以工作,尽管速度很慢。使用生成器或序列化有帮助吗?谢谢。


你可以建立一个字典来查找 v。我添加了进一步的小优化:

def calc(my_file, my_list)

    vd = dict( (v[1],v[0]) for v in my_list)

    my_file.seek(0,0)
    for line in my_file:
        f0, f1, f2, f3 = line[:-1].split('\t')
        v0 = vd.get(f2)
        if v0 is not None:
           yield (v0, f1, f3)

对于大型企业来说这应该要快得多my_list.

Using get比检查是否更快i[2] is in vd+ 访问vd[i[2]]

为了获得超出这些优化的更多加速​​,我建议http://www.cython.org http://www.cython.org

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Python 中将列表项与大文件中的行进行匹配的最有效方法是什么? 的相关文章

随机推荐

  • Dart - 对 Base64 字符串进行编码和解码

    如何原生转换string gt base64 and base64 gt string 我只找到这个字节到base64字符串 http www dartlang org docs dart up and running contents c
  • 在 SwiftUI 中的 2 个子视图之间共享 @State var Bool

    我是一名设计师 我尝试学习 SwiftUI 是为了好玩 也是为了确保我更多地了解我的开发团队需要我做什么 有一些非常简单的事情我就是做不到 正如您从下面的这段代码中看到的 我只想在 var showHello 为 true 时显示文本 并且
  • 第一范式和时间数据

    第一个范式表示行顺序不重要 这是否意味着以日期作为键一部分的表不是 1NF 例如 考虑一个股票价格表 其中日期 时间是 PK 的一部分 在本例中 您可以通过按日期对数据进行排序并选择顶部的 1 行来获取最后的价格 这是否意味着为了满足 1N
  • 如何根据条件进行正则表达式匹配?

    我正在尝试制作一个条件正则表达式 我知道还有其他关于堆栈溢出的帖子 但问题太具体了 问题 如何创建一个仅在给定条件下匹配某些内容的正则表达式 一个例子 一个例子是 如果我们有一个字符串列表 这是在java中 String nums 42 3
  • WinRT:如何确保图像在画布上以像素完美的方式绘制?

    我正在添加Image http msdn microsoft com en us library windows apps windows ui xaml controls image aspx实例到Canvas http msdn mic
  • React/Redux 调度不触发减速器

    努力从我的 React 组件中调度一个操作 这是我的第一个 Redux 应用程序 一切似乎都工作正常 但如果是的话我就不会发布这个问题 我正在使用 Redux devTool 来调试我的应用程序 如果我使用 devTools 中的调度程序
  • 如何用Java制作一个简单的元音计数器方法?

    这是我的方法 public char ReturnAllVowels String word for int i 0 i lt word length i if word contains a e i o u 它说 不能应用于 String
  • Preg_match 到正则表达式等效表达式以匹配任何 Unicode 字母

    我被困在preg match vs regex 我正在尝试验证客户端的用户输入值 对于他们的名字和姓氏 我有这个表达方式 适合preg match p L s ui lt working fine with preg match 我需要 J
  • 我如何通过迁移的帮助将数据插入表中,并且该表是之前通过另一个迁移生成的

    我有一个包含用户名 角色和公司的角色表 我想通过新的迁移文件将数据插入到该表中 那么我该怎么做 我得到了这样的代码 但我如何使用它以及我无法理解的地方 class Foo lt ActiveRecord Migration def self
  • 为什么 EOF(文件结尾)在行尾没有 '\n' 之前不起作用?

    于是我开始用ANSI C的书来学习C 本书的早期练习之一是编写一个程序 该程序接受文本输入并在新行上打印每个单词 这很简单 所以我做了 include
  • 如何从 Visual Studio 中打开 TFS 中的单个变更集

    有人通过电子邮件给我发送了一个 TFS 变更集 ID 现在我正在尝试打开这个单个变更集 在 Visual Studio 中 VS 2008 如果重要的话 有一个简单的方法可以做到这一点吗 在 Visual Studio 中 键盘快捷键可用于
  • 在java中使用没有“循环”的标签

    我一直认为标签必须仅与循环一起使用 但似乎并非如此 给出这样的代码 public class LabelTest public static void main String args label1 System out println l
  • 鼠标放大算法(OpenGL)

    我有一个带有左上角坐标系的 OpenGL 场景 当我 glScale 时 它 从左上角的 0 0 放大 我希望它从鼠标坐标 相对于 OGL 框架 放大 这是怎么做到的 谢谢 我相信这可以通过四个步骤来完成 使用窗口系统 即 GLUT 或 S
  • 如果结果来得太晚,则限制但丢弃结果

    我正在编写一个用户界面 用户可以在其中输入搜索词 并且列表会不断更新以提供建议 我的第一反应是 Rx 原始 Throttle 是一个完美的匹配 但它让我成功了一半 这些建议需要一段时间才能获取 因此我在 UI 线程上异步获取它们 问题是 如
  • errno 值未更新 (c++)

    我是编码新手 目前正在学习 C 我了解一点 C 正在阅读 math h 中的函数并阅读 errno 根据我提到的网站 域错误 输入参数超出了运算的数学定义范围 例如 std sqrt 1 std log 1 或 std acos 2 如果设
  • 使用非原始参数进行参数化 JUnit 测试?

    很有可能使用参数运行 JUnit 测试 其中使用不同的数据多次执行相同的测试方法 如下所述 http junit org apidocs org junit runners Parameterized html http junit org
  • Spring可为空注释生成未知枚举常量警告

    在我的应用程序中 每当我添加 Nullable 从进口org springframework lang Nullable 到任何字段 我都会收到构建警告 警告 java 未知的枚举常量 javax annotation meta When
  • 将点添加到r中的3d图中

    我是 R 中 3D 绘图的初学者 我需要帮助 我尝试绘制一些简单的抛物面 library rgl x lt seq 1 1 0 2 y lt x f lt function x y x 2 y 2 z lt outer x y f pers
  • 如何在 Typescript 中使用 Ziggy 包

    所以我想创建一个使用 axios 检索数据的打字稿类 但我无法找到使用的方法route ziggy 在我的 Typescript 类中提供的函数 因为它不是 npm 包 我对 Node js 还是很陌生 任何帮助是极大的赞赏 import
  • 在 Python 中将列表项与大文件中的行进行匹配的最有效方法是什么?

    我有一个大文件 5Gb 名为my file 我有一个名为my list 读取文件中每一行的最有效方法是什么 如果来自my list匹配以下行中的项目my file 创建一个名为的新列表matches包含以下行中的项目my file以及来自的