gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 05:42:28 25 4
gpt4 key购买 nike

我有大量 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com