【问题标题】:How Can I Index a CSV File to Search Efficiently?如何索引 CSV 文件以高效搜索?
【发布时间】:2016-06-16 01:00:37
【问题描述】:

我有一个包含超过 400k 行和大约 20 列的 CSV 文件,因此当我在寻找某个值时搜索 CSV 需要花费太多时间。我想知道如何映射文件,以便可以有效快速地搜索它以获得某个值。

提前感谢您!我很乐意回答任何问题!

【问题讨论】:

  • 您是否尝试过内存映射或使用 SQL 数据库?
  • 不!我对数据库选项一点也不熟悉。
  • 你打算怎么搜索?您知道要在哪一列中搜索还是要在所有列中搜索文本(例如在文本文件中)?
  • 您可以尝试使用sqlite 数据库,方法是将行/列存储在表中,然后使用sqlite3 Python 模块搜索您的数据,或者只使用Pandas 模块(哪个可能最简单?)
  • @MaxU 我知道要搜索哪一列但不知道哪一行。

标签: python csv search dictionary search-engine


【解决方案1】:

pandas.read_csv 函数使它相当容易。 Python 也有csv reading/writing functions

更新:这是pandas 创建者在pandas 中快速搜索的a link to a post

【讨论】:

  • 我尝试过使用内置的 CSV 读取模块,但就像我在问题中暗示的那样,它需要的时间太长了!
  • ++ 链接到 pd.searchsorted() - 我不知道。
【解决方案2】:

如果我正在做这样的事情,我会将 cvs 文件加载到 SQLite 数据库文件中,然后使用 SQLite 的 Python 绑定来搜索数据。 SQLite 免费且使用广泛,因此您可以轻松找到支持、编码 sn-ps 等。这种方法确实需要一些基本的数据库概念,主要是简单的 SQL 语句。

【讨论】:

  • 如何将 CSV 文件加载到 SQLite 文件中?
  • 关于 SQLite 的教程超出了 SO 问题的范围......但是这样的教程很容易找到。安装 SQLite 并试用一下,您将在几个小时内完成您的解决方案。
【解决方案3】:

假设您可以将整个内容存储在 RAM 中(即加载它),我会使用 pandas。

import pandas as pd
csv_loc = 'C:/yourcsv.csv'
df = pd.read_csv(csv_loc, sep=',', header=0) #http://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_csv.html
df['name'] # would select a column called name
# This would show observations which start with STARBUC
match = df['name'].str.contains('(^STARBUC)')
print(df['name'][match].value_counts())

等等。 This is a great tutorialand this

【讨论】:

  • 那么如何在整个 csv 中搜索字符串?
猜你喜欢
  • 2021-10-13
  • 2014-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-15
  • 1970-01-01
  • 2012-12-04
相关资源
最近更新 更多