将标题与数据集的其余部分分开

时间:2019-07-16 20:09:35

标签: python-3.x csv

我正在读取一个csv文件,然后尝试将标题与文件的其余部分分开。 hn变量是不带第一行的读入文件。 hn_header应该是数据集中的第一行。 如果仅定义这两个变量之一,则代码可以工作。如果我都定义了它们,那么后面写的一个将不包含任何数据。那怎么可能?

from csv import reader

opened_file =  open("hacker_news.csv")
read_file = reader(opened_file)
hn = list(read_file)[1:]     #this should contain all rows except the header
hn_header = list(read_file)[0] # this should be the header



print(hn[:5]) #works 
print(len(hn_header)) #empty list, does not contain the header

2 个答案:

答案 0 :(得分:2)

CSV阅读器只能对文件进行一次遍历,这是您第一次将其转换为列表时进行的遍历。为了避免多次迭代,可以将列表保存到变量中。

hn_list = list(read_file)
hn = hn_list[1:]
hn_header = hn_list[0]

或者您可以使用extended iterable unpacking

分割文件
hn_header, *hn = list(read_file)

答案 1 :(得分:1)

只需在代码行以下进行更改,无需其他步骤。 read_file = list(reader(opened_file))。我希望现在您的代码可以完美运行。

  

阅读器对象是一个迭代器,根据定义,迭代器对象只能使用一次。当它们完成迭代后,您将一无所有。

您可以从这个Why can I only use a reader object once?问题中获得更多相关信息,也可以从该问题中获得引用。