python - 使用Python搜索csv文件并提取所需信息

标签 python csv

我有大量 csv 文件格式的 PC 库存。我想编写一个代码来帮助我找到所需的信息。具体来说,我想输入用户名或用户名的一部分(用户名位于文件的第五列),并让代码给出该计算机的名称(计算机名位于文件中的第二列)。我的代码不起作用,我不知道问题出在哪里。谢谢您的帮助,我很感激!

import csv  #import csv library

#open PC Inventory file
info = csv.reader(open('Creedmoor PC Inventory.csv', 'rb'), delimiter=',')

key_index = 4   # Names are in column 5 (array index is 4)
user = raw_input("Please enter employee's name:")
rows = enumerate(info)
for row in rows:
    if row == user: #name is in the PC Inventory
        print row #show the computer name

最佳答案

您遇到了三个问题。

首先,由于 rows = enumerate(info)rows 中的每个 row 将是行号和行号的元组实际行。

其次,实际行本身是一系列列。

因此,如果您想将 user 与(索引,行)元组的第五列进行比较,您需要执行以下操作:

if row[1][key_index] == user:

或者,更清楚地说:

for index, row in rows:
    if row[key_index] == user:
        print row[1]

或者,如果您实际上不需要行号,则不要使用枚举:

for row in info:
    if row[key_index] == user:
        print row[1]
<小时/>

但这只会让您遇到第三个问题:您希望能够搜索名称​​或名称的一部分。因此,您需要 in 运算符:

for row in info:
    if user in row[key_index]:
        print row[1]
<小时/>

将整个内容读入可搜索的数据结构会更清楚:

inventory = { row[key_index]: row for row in info }

那么您不需要 for 循环来搜索用户;你可以这样做:

print inventory[user][1]

但是不幸的是,这不适用于子字符串搜索。您需要更复杂的数据结构。如果您只需要前缀搜索,则字典树或任何排序/可二分结构都可以使用;如果您需要任意子字符串搜索,您需要一些更奇特的东西,但这可能不值得做。

您可以考虑为此使用数据库。例如,对于 SQL 数据库(如 sqlite3),您可以执行以下操作:

cur = db.execute('SELECT Computer FROM Inventory WHERE Name LIKE %s', name)

导入 CSV 文件并写入数据库并不难,如果您要针对单个 CSV 文件运行大量搜索,那么可能是值得的。 (此外,如果您当前正在通过在 Excel 或 LibreOffice 中打开 CSV、修改它并重新导出来编辑文件,则可以直接将 Excel/LO 电子表格附加到数据库进行编辑。)否则,它将只是无缘无故地让事情变得更加复杂。

关于python - 使用Python搜索csv文件并提取所需信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17178912/

相关文章:

csv - 在将 spark 数据帧写入 csv 时转义值内的逗号

php - Laravel Eloquent 查询优化

csv - 将包含 Controller 与动态路径一起使用

python - 如何在不考虑空格并知道字符串的原始索引的情况下在字符串中查找子字符串

python - 使用 scipy 的 trapz 函数进行积分

python - 如何使用python在redis集群模式下执行get命令?

python - python中的多个正则表达式匹配

python - Playwright page.pdf() 只获取一页

python - 使用 Python 打印到 CSV 文件

python - 如何使用RDKit计算SMILE结构列表的分子指纹和相似度?