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

如何在python中读取csv文件的特定行?,python,python-2.7,csv,Python,Python 2.7,Csv,我疯狂地搜索,试图找到如何读取csv文件中的行 我需要从1000行中随机读取一行,每行有3列。第一列有一封电子邮件。我需要随机发送一封电子邮件,然后把第2列和第3列拿出来。(Python 2.7,csv文件) 例如: 名称日期颜色 雷可能是灰色的 亚历克斯·阿普·格林 安君蓝 金黄色 罗布·梅·布莱克 我需要的不是第1列第3行,而是[Ann],她的整行。这是一个CSV文件,有1000多个名称。我必须输入她的名字并输出整行 我试过的 from collections import namedt

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

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

例如:

名称日期颜色
雷可能是灰色的
亚历克斯·阿普·格林
安君蓝
金黄色
罗布·梅·布莱克
我需要的不是第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)
回溯(最近一次呼叫最后一次):
文件“”,第2行,在
TypeError:\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
我也尝试过其他方法,但几乎没有结果。我是python的初学者。

我想你需要的是

然后你可以输入你的随机数和文件名,得到一个随机行。

我想你需要的是


然后你可以输入你的随机数和文件名,得到一个随机行。

你走对了方向。第一个问题:您从未打开位于
文件位置的文件。因此,当您迭代电子表格中的
行时:
,您正在迭代
电子表格中的字符,这些字符是
文件位置的字符,这些字符是
“C:/Users/…”
的字符。因此,您要做的第一件事实际上是打开文件:

spreadsheet = open(file_location, 'r')
您的循环中还有另一个问题。当您在
for
循环中对文件进行迭代时,会返回文件的行。因此,在每次迭代中,
将是一行,例如
“光线可能是灰色的”
。当你在上面调用
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']
从集合导入namedtuple
Entry=namedtuple('Entry','Name,Date,Color'))
file_location=“C:/Users/abriman/Desktop/Book.csv”
ss_dict={}

电子表格=打开(文件位置,'r')#您走在正确的轨道上。第一个问题:您从未打开位于
文件位置的文件。因此,当您迭代电子表格中的
行时:
,您正在迭代
电子表格中的字符,这些字符是
文件位置的字符,这些字符是
“C:/Users/…”
的字符。因此,您要做的第一件事实际上是打开文件:

spreadsheet = open(file_location, 'r')
您的循环中还有另一个问题。当您在
for
循环中对文件进行迭代时,会返回文件的行。因此,在每次迭代中,
将是一行,例如
“光线可能是灰色的”
。当你在上面调用
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']
从集合导入namedtuple
Entry=namedtuple('Entry','Name,Date,Color'))
file_location=“C:/Users/abriman/Desktop/Book.csv”
ss_dict={}

电子表格=打开(文件位置,'r')#您的问题的解决方案可以是简单的词典理解:

>>> Entry = namedtuple('Entry', 'Name, Date, Color')
>>> [l for l in open('t.tsv', 'r')]
<<<
['Name Date  Color\n',
 'Ray  May   Gray\n',
 'Alex Apr   Green\n',
 'Ann  Jun   Blue\n',
 'Kev  Mar   Gold\n',
 'Rob  May   Black\n']
>>> [l.split() for l in open('t.tsv', 'r')]
<<<
[['Name', 'Date', 'Color'],
 ['Ray', 'May', 'Gray'],
 ['Alex', 'Apr', 'Green'],
 ['Ann', 'Jun', 'Blue'],
 ['Kev', 'Mar', 'Gold'],
 ['Rob', 'May', 'Black']]
>>> [Entry(*l.split()) for l in open('t.tsv', 'r')]
<<<
[Entry(Name='Name', Date='Date', Color='Color'),
 Entry(Name='Ray', Date='May', Color='Gray'),
 Entry(Name='Alex', Date='Apr', Color='Green'),
 Entry(Name='Ann', Date='Jun', Color='Blue'),
 Entry(Name='Kev', Date='Mar', Color='Gold'),
 Entry(Name='Rob', Date='May', Color='Black')]    >>> {'fooo':e for e in Entry(*l.split()) for l in open('t.tsv', 'r')}
>>> {e.Name:e for e in list(Entry(*l.split()) for l in open('t.tsv', 'r'))}
<<<
{'Alex': Entry(Name='Alex', Date='Apr', Color='Green'),
 'Ann': Entry(Name='Ann', Date='Jun', Color='Blue'),
 'Kev': Entry(Name='Kev', Date='Mar', Color='Gold'),
 'Name': Entry(Name='Name', Date='Date', Color='Color'),
 'Ray': Entry(Name='Ray', Date='May', Color='Gray'),
 'Rob': Entry(Name='Rob', Date='May', Color='Black')}
>>> { line['Name']: line for line in csv.DictReader(open('t.tsv')) }
<<<
{'Alex': {'Color': 'Green', 'Date': 'Apr', 'Name': 'Alex'},
 'Ann': {'Color': 'Blue', 'Date': 'Jun', 'Name': 'Ann'},
 'Kev': {'Color': 'Gold', 'Date': 'Mar', 'Name': 'Kev'},
 'Ray': {'Color': 'Gray', 'Date': 'May', 'Name': 'Ray'},
 'Rob': {'Color': 'Black', 'Date': 'May', 'Name': 'Rob'}}
>>> rows_by_name = { line['Name']: line for line in csv.DictReader(open('t.tsv')) }
>>> rows_by_name['Ann']
<<< {'Color': 'Blue', 'Date': 'Jun', 'Name': 'Ann'}
或通过词典理解:

>>> Entry = namedtuple('Entry', 'Name, Date, Color')
>>> [l for l in open('t.tsv', 'r')]
<<<
['Name Date  Color\n',
 'Ray  May   Gray\n',
 'Alex Apr   Green\n',
 'Ann  Jun   Blue\n',
 'Kev  Mar   Gold\n',
 'Rob  May   Black\n']
>>> [l.split() for l in open('t.tsv', 'r')]
<<<
[['Name', 'Date', 'Color'],
 ['Ray', 'May', 'Gray'],
 ['Alex', 'Apr', 'Green'],
 ['Ann', 'Jun', 'Blue'],
 ['Kev', 'Mar', 'Gold'],
 ['Rob', 'May', 'Black']]
>>> [Entry(*l.split()) for l in open('t.tsv', 'r')]
<<<
[Entry(Name='Name', Date='Date', Color='Color'),
 Entry(Name='Ray', Date='May', Color='Gray'),
 Entry(Name='Alex', Date='Apr', Color='Green'),
 Entry(Name='Ann', Date='Jun', Color='Blue'),
 Entry(Name='Kev', Date='Mar', Color='Gold'),
 Entry(Name='Rob', Date='May', Color='Black')]    >>> {'fooo':e for e in Entry(*l.split()) for l in open('t.tsv', 'r')}
>>> {e.Name:e for e in list(Entry(*l.split()) for l in open('t.tsv', 'r'))}
<<<
{'Alex': Entry(Name='Alex', Date='Apr', Color='Green'),
 'Ann': Entry(Name='Ann', Date='Jun', Color='Blue'),
 'Kev': Entry(Name='Kev', Date='Mar', Color='Gold'),
 'Name': Entry(Name='Name', Date='Date', Color='Color'),
 'Ray': Entry(Name='Ray', Date='May', Color='Gray'),
 'Rob': Entry(Name='Rob', Date='May', Color='Black')}
>>> { line['Name']: line for line in csv.DictReader(open('t.tsv')) }
<<<
{'Alex': {'Color': 'Green', 'Date': 'Apr', 'Name': 'Alex'},
 'Ann': {'Color': 'Blue', 'Date': 'Jun', 'Name': 'Ann'},
 'Kev': {'Color': 'Gold', 'Date': 'Mar', 'Name': 'Kev'},
 'Ray': {'Color': 'Gray', 'Date': 'May', 'Name': 'Ray'},
 'Rob': {'Color': 'Black', 'Date': 'May', 'Name': 'Rob'}}
>>> rows_by_name = { line['Name']: line for line in csv.DictReader(open('t.tsv')) }
>>> rows_by_name['Ann']
<<< {'Color': 'Blue', 'Date': 'Jun', 'Name': 'Ann'}
>{line['Name']:csv.DictReader中的行对应行(open('t.tsv'))}
>行按行名称={line['name']:csv.DictReader中的行对应行(open('t.tsv'))}
>>>按名称[安]排列的行

解决问题的方法可以是简单的词典理解:

>>> Entry = namedtuple('Entry', 'Name, Date, Color')
>>> [l for l in open('t.tsv', 'r')]
<<<
['Name Date  Color\n',
 'Ray  May   Gray\n',
 'Alex Apr   Green\n',
 'Ann  Jun   Blue\n',
 'Kev  Mar   Gold\n',
 'Rob  May   Black\n']
>>> [l.split() for l in open('t.tsv', 'r')]
<<<
[['Name', 'Date', 'Color'],
 ['Ray', 'May', 'Gray'],
 ['Alex', 'Apr', 'Green'],
 ['Ann', 'Jun', 'Blue'],
 ['Kev', 'Mar', 'Gold'],
 ['Rob', 'May', 'Black']]
>>> [Entry(*l.split()) for l in open('t.tsv', 'r')]
<<<
[Entry(Name='Name', Date='Date', Color='Color'),
 Entry(Name='Ray', Date='May', Color='Gray'),
 Entry(Name='Alex', Date='Apr', Color='Green'),
 Entry(Name='Ann', Date='Jun', Color='Blue'),
 Entry(Name='Kev', Date='Mar', Color='Gold'),
 Entry(Name='Rob', Date='May', Color='Black')]    >>> {'fooo':e for e in Entry(*l.split()) for l in open('t.tsv', 'r')}
>>> {e.Name:e for e in list(Entry(*l.split()) for l in open('t.tsv', 'r'))}
<<<
{'Alex': Entry(Name='Alex', Date='Apr', Color='Green'),
 'Ann': Entry(Name='Ann', Date='Jun', Color='Blue'),
 'Kev': Entry(Name='Kev', Date='Mar', Color='Gold'),
 'Name': Entry(Name='Name', Date='Date', Color='Color'),
 'Ray': Entry(Name='Ray', Date='May', Color='Gray'),
 'Rob': Entry(Name='Rob', Date='May', Color='Black')}
>>> { line['Name']: line for line in csv.DictReader(open('t.tsv')) }
<<<
{'Alex': {'Color': 'Green', 'Date': 'Apr', 'Name': 'Alex'},
 'Ann': {'Color': 'Blue', 'Date': 'Jun', 'Name': 'Ann'},
 'Kev': {'Color': 'Gold', 'Date': 'Mar', 'Name': 'Kev'},
 'Ray': {'Color': 'Gray', 'Date': 'May', 'Name': 'Ray'},
 'Rob': {'Color': 'Black', 'Date': 'May', 'Name': 'Rob'}}
>>> rows_by_name = { line['Name']: line for line in csv.DictReader(open('t.tsv')) }
>>> rows_by_name['Ann']
<<< {'Color': 'Blue', 'Date': 'Jun', 'Name': 'Ann'}
或通过词典理解:

>>> Entry = namedtuple('Entry', 'Name, Date, Color')
>>> [l for l in open('t.tsv', 'r')]
<<<
['Name Date  Color\n',
 'Ray  May   Gray\n',
 'Alex Apr   Green\n',
 'Ann  Jun   Blue\n',
 'Kev  Mar   Gold\n',
 'Rob  May   Black\n']
>>> [l.split() for l in open('t.tsv', 'r')]
<<<
[['Name', 'Date', 'Color'],
 ['Ray', 'May', 'Gray'],
 ['Alex', 'Apr', 'Green'],
 ['Ann', 'Jun', 'Blue'],
 ['Kev', 'Mar', 'Gold'],
 ['Rob', 'May', 'Black']]
>>> [Entry(*l.split()) for l in open('t.tsv', 'r')]
<<<
[Entry(Name='Name', Date='Date', Color='Color'),
 Entry(Name='Ray', Date='May', Color='Gray'),
 Entry(Name='Alex', Date='Apr', Color='Green'),
 Entry(Name='Ann', Date='Jun', Color='Blue'),
 Entry(Name='Kev', Date='Mar', Color='Gold'),
 Entry(Name='Rob', Date='May', Color='Black')]    >>> {'fooo':e for e in Entry(*l.split()) for l in open('t.tsv', 'r')}
>>> {e.Name:e for e in list(Entry(*l.split()) for l in open('t.tsv', 'r'))}
<<<
{'Alex': Entry(Name='Alex', Date='Apr', Color='Green'),
 'Ann': Entry(Name='Ann', Date='Jun', Color='Blue'),
 'Kev': Entry(Name='Kev', Date='Mar', Color='Gold'),
 'Name': Entry(Name='Name', Date='Date', Color='Color'),
 'Ray': Entry(Name='Ray', Date='May', Color='Gray'),
 'Rob': Entry(Name='Rob', Date='May', Color='Black')}
>>> { line['Name']: line for line in csv.DictReader(open('t.tsv')) }
<<<
{'Alex': {'Color': 'Green', 'Date': 'Apr', 'Name': 'Alex'},
 'Ann': {'Color': 'Blue', 'Date': 'Jun', 'Name': 'Ann'},
 'Kev': {'Color': 'Gold', 'Date': 'Mar', 'Name': 'Kev'},
 'Ray': {'Color': 'Gray', 'Date': 'May', 'Name': 'Ray'},
 'Rob': {'Color': 'Black', 'Date': 'May', 'Name': 'Rob'}}
>>> rows_by_name = { line['Name']: line for line in csv.DictReader(open('t.tsv')) }
>>> rows_by_name['Ann']
<<< {'Color': 'Blue', 'Date': 'Jun', 'Name': 'Ann'}
>{line['Name']:csv.DictReader中的行对应行(open('t.tsv'))}
>行按行名称={line['name']:csv.DictReader中的行对应行(open('t.tsv'))}
>>>按名称[安]排列的行

首先,你们都很棒!反应很好,我感谢你的帮助。对于您的代码,我仍然收到一个错误,---------------{File',第4行打印命令['Ann']^SyntaxError:无效语法}我也尝试过缩进它,但什么都没有。@user3726972您的代码中有插入符号
^
?看起来是这样,这可能是一个语法错误。如果问题是其他的,请发布另一个问题,询问这个新问题。首先,你们都很棒!反应很好,我感谢你的帮助。对于您的代码,我仍然收到一个错误,---------------{File',第4行打印命令['Ann']^SyntaxError:无效语法}我也尝试过缩进它,但什么都没有。@user3726972您的代码中有插入符号
^
?看起来是这样,这可能是一个语法错误。如果问题是其他问题,请发布另一个关于新问题的问题。