【问题标题】:Read CSV file and only keep some lines according to values in list (Python)读取 CSV 文件并根据列表中的值仅保留一些行(Python)
【发布时间】:2017-01-14 10:38:09
【问题描述】:

我将重新表述我之前所说的问题:

我目前正在尝试从大约 6 亿行的文件中仅读取大约 2600 万行。我目前有一个包含我感兴趣的 2600 万行的列表。

我的解决方法如下:

## list_ is a list of indices with the number of the 26MM rows 

# First, open the output file where i want to copy the 26MM rows
with open(output_file,'w') as g:
# Open the source file with 600MM rows
  with open(source_file,'r') as f:
    for i,line in enumerate(f):
      if i in list_:
        g.write(line)

考虑到列表的大小和原始文件的大小,我担心处理这个文件可能需要很长时间。我知道其他问题已经涵盖了这个主题,但我认为其他帖子没有询问文本文件何时非常大。

感谢您并为之前令人困惑的帖子道歉,

【问题讨论】:

  • 你尝试的时候发生了什么?
  • 现在已经持续了几个小时。我只是想知道是否有更好的方法来做到这一点。我可能应该更好地描述我所面临的问题,并且在数百万次查找列表中的值时,这是我能想到的最好的方法。
  • 尝试退后一步,描述实际问题。为什么你需要检查这个列表 6 亿次?元素是完全随机的还是有某种结构?几乎可以肯定,有更好的方法来满足您的需求。
  • 鉴于您提供的信息很少,我唯一可以建议的是将 2600 万个项目列表转换为一个集合。检查一个项目是否在集合中应该更快。
  • 对不起,伙计们,你是对的。让我重新表述问题以提供更多上下文。

标签: python


【解决方案1】:

如果您只想检查一个值是否在该列表中,那么每次检查的最佳时间是 O(1)。您可能想使用 hashset 而不是列表。您可以在 python 中搜索哈希集以查看一些示例,例如 this 或查看此文档 sets

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多