Skip to main content
 首页 » 编程设计

python之如何在 python 中读取 csv 文件的特定行

2025年05月04日16insus

我疯狂地搜索,试图找到具体如何读取 csv 文件中的行。

我需要从 1000 行中随机读取一行,每行有 3 列。第一列有一封电子邮件。我需要放入一封随机电子邮件,然后取出第 2 列和第 3 列。 (Python 2.7,csv 文件)

例子:

Name Date  Color 
Ray  May   Gray 
Alex Apr   Green 
Ann  Jun   Blue 
Kev  Mar   Gold 
Rob  May   Black 

我需要的不是第 1 列第 3 行,而是 [Ann],她的整行。这是一个 CSV 文件,包含 1000 多个名称。我必须输入她的名字并输出她的整行。


我尝试过的

from collections import namedtuple 
Entry = namedtuple('Entry', 'Name, Date, Color') 
file_location = "C:/Users/abriman/Desktop/Book.csv" 
ss_dict = {} 
spreadsheet = file_location = "C:/Users/abriman/Desktop/Book.csv" 
for row in spreadsheet: 
    entry = Entry(*tuple(row)) 
    ss_dict['Ann'] 

我的错误是

Traceback (most recent call last): 
  File "<stdin>", line 2, in <module> 
TypeError: __new__() takes exactly 4 arguments (2 given) 

我也尝试过其他方法,但收效甚微。我是 Python 的初学者。

请您参考如下方法:

您走在正确的轨道上。第一个问题:您永远不会打开位于file_location 的文件。因此,当您迭代 for row in spreadsheet: 时,您正在迭代 spreadsheet 的字符,它们是 file_location 的字符,是 "C:/Users/..." 的字符。因此,您要做的第一件事实际上是打开文件:

spreadsheet = open(file_location, 'r') 

您的循环中还有另一个问题。当您在 for 循环中遍历文件时,您会取回文件的行。因此,在每次迭代中,row 将是一行,例如“雷·梅·格雷”。当你调用 tuple() 时,你会得到一个看起来像 ('R', 'a', 'y', ' ', ' ', ' M', ...)。您需要做的是通过拆分空格来构建您的元组:

entry = Entry(*row.split()) 

然后,您需要添加您的词条到字典ss_dict:

ss_dict[entry.Name] = entry 

最后,您可以读出 ss_dict['Ann'] 的值,但这应该在您的循环之外 - 如果您在循环内这样做,您可能会尝试读取该值ss_dict['Ann'] 在它被设置之前。总而言之,您的代码应如下所示:

from collections import namedtuple 
Entry = namedtuple('Entry', 'Name, Date, Color') 
file_location = "C:/Users/abriman/Desktop/Book.csv" 
ss_dict = {} 
spreadsheet = open(file_location, 'r') # <-- 
for row in spreadsheet: 
    entry = Entry(*row.split()) # <-- 
    ss_dict[entry.Name] = entry # <-- 
print ss_dict['Ann'] 

顺便说一句,您收到错误消息的原因是,当您执行 for row in spreadsheet: 时 spreadsheet 是一个字符串,row 只是一个字符,正如我提到的,所以 tuple(row) 只是一个包含一个字符的元组,因此长度为 1,所以你当您执行 *tuple(row) 时,只传递一个参数而不是三个参数。


综上所述,您可能需要考虑查看 the csv module ,它是标准库的一部分,专为读取 csv 文件而设计。从长远来看,它可能会让您的生活更轻松。