我已经疯狂地搜索,试图专门查找如何读取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
我需要[Ann],而不是第1列的第3行。这是一个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的初学者。
解决问题的方法可能是简单的字典理解:
>>> 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')}
我认为您正在考虑将第一行作为标题名称阅读。Python具有DictReader- https: //docs.python.org/2/library/csv.html#csv.DictReader
>>> import csv
>>> for line in csv.DictReader(open('t.tsv')): print line # don't forget to make your file coma-separated.
{'Date': 'May', 'Color': 'Gray', 'Name': 'Ray'}
{'Date': 'Apr', 'Color': 'Green', 'Name': 'Alex'}
{'Date': 'Jun', 'Color': 'Blue', 'Name': 'Ann'}
{'Date': 'Mar', 'Color': 'Gold', 'Name': 'Kev'}
{'Date': 'May', 'Color': 'Black', 'Name': 'Rob'}
或具有字典理解能力:
>>> { 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'}
如果您想要随机样本-我建议您首先将一行读入列表,然后通过randbom模块进行选择。或者...让我们用Entry来做:
>>> rows = list(Entry(*l.split()) for l in open('t.tsv', 'r'))
>>> import random
>>> random.sample(rows, 1)
<<< [Entry(Name='Ray', Date='May', Color='Gray')]
>>> random.sample(rows, 1)
<<< [Entry(Name='Alex', Date='Apr', Color='Green')]
>>> random.sample(rows, 1)
<<< [Entry(Name='Name', Date='Date', Color='Color')]
>>> random.sample(rows, 1)
<<< [Entry(Name='Alex', Date='Apr', Color='Green')]
>>> random.sample(rows, 1)
<<< [Entry(Name='Alex', Date='Apr', Color='Green')]
>>> random.sample(rows, 1)
<<< [Entry(Name='Alex', Date='Apr', Color='Green')]
>>> random.sample(rows, 3)
<<<
[Entry(Name='Ray', Date='May', Color='Gray'),
Entry(Name='Kev', Date='Mar', Color='Gold'),
Entry(Name='Ann', Date='Jun', Color='Blue')]
>>> random.sample(rows, 3)
<<<
[Entry(Name='Ann', Date='Jun', Color='Blue'),
Entry(Name='Rob', Date='May', Color='Black'),
Entry(Name='Name', Date='Date', Color='Color')]
>>> random.sample(rows, 3)
<<<
[Entry(Name='Rob', Date='May', Color='Black'),
Entry(Name='Ann', Date='Jun', Color='Blue'),
Entry(Name='Kev', Date='Mar', Color='Gold')]
但请注意,您可能会过多地加载内存。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句