我的代码如下:
file = open('traintag1.csv', 'r')
csv_reader = csv.reader(file)
data = [x[-1] for x in csv_reader]
print len(data)
target = [x[-2] for x in csv_reader]
print len(target)
结果是len(data)=430
哪个是正确的,但len(target)=0
哪个应该430
与len(data)
. 为什么长度不一样?
另外,有没有办法按列读取csvfile?
该文件包含如下数据:
7765,1256,http://hshihwih.com,0
12453,18978,http://shjhjkshd.com,1
问题 :
您正面临这个问题,因为它csv_reader
是迭代器(请谷歌这个概念 :) )。
迭代器是具有“ next
”方法可用的对象。当您执行时csv_reader = csv.reader(file)
,它会创建csv_reader
为迭代器。csv_reader.next()
当时会给你一行。但是随着线路结束,没有办法重新启动它。
请检查以下:
C:\Users\dinesh\Desktop>python
Python 2.7.13 (v2.7.13:a06454b1afa1, Dec 17 2016, 20:53:40) [MSC v.1500 64 bit (
AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import csv
>>> file = open('a.csv','r')
>>> csv_reader = csv.reader(file)
>>>
>>> dir(csv_reader)
['__class__', '__delattr__', '__doc__', '__format__', '__getattribute__', '__has
h__', '__init__', '__iter__', '__new__', '__reduce__', '__reduce_ex__', '__repr_
_', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'dialect', 'line
_num', 'next']
>>>
>>> csv_reader.next()
['7765', '1256', 'http://hshihwih.com', '0']
>>>
>>> csv_reader.next()
['12453', '18978', 'http://shjhjkshd.com', '1']
>>>
>>> csv_reader.next()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration
在您的代码中,当第一次迭代data
完成时,target
由于我上面解释的原因,它再次无法返回。
解决方案 :
在一个循环中收集数据如下:
import csv
file = open('a.csv','r')
csv_reader = csv.reader(file)
data = []
target = []
for x in csv_reader:
data.append(x[-1])
target.append(x[-2])
print data
print len(data)
print target
print len(target)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句