为什么要读取csv文件的列两次,最后一列是None?

时间:2017-03-22 06:43:42

标签: python csv

我的代码如下:

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应该是430len(data)7765,1256,http://hshihwih.com,0 12453,18978,http://shjhjkshd.com,1 相同。为什么长度不同?

另外,有没有办法按列读取csvfile?

该文件包含以下数据:

<script>
  import { swiper, swiperSlide } from 'vue-awesome-swiper';

  export default {
    components: {
      swiper,
      swiperSlide,
    },
    data() {
      return {
        swiperOption: {
          autoplay: false,
          spaceBetween: 20,
          pagination: '.swiper-pagination',
          paginationClickable: true,
        },
      };
    },
  };
</script>

3 个答案:

答案 0 :(得分:2)

您可以尝试以下内容:

file  = open('traintag1.csv','r')
csv_reader = csv.reader(file)
data, target = zip(*[(x[-1], x[-2]) for x in csv_reader])
print len(data)
print len(target)

此代码创建元组列表,然后使用zip将对扩展为独立列表。

答案 1 :(得分:1)

csv_reader迭代一次对象。如果你一次迭代它就不能再次迭代它,所以你不会得到第二次循环的任何值。

请尝试这个简单的代码,

import csv

file  = open('traintag1.csv','r')
csv_reader = csv.reader(file)

target = []
data = []
for x in csv_reader:
    data.append(x[-1])
    target.append(x[-2])

print len(data)
print len(target)

在此代码中,targetdata的值均来自单个循环。

如有任何疑问,请与我们联系。

答案 2 :(得分:1)

问题:

由于app.post('/', function(req, res, next) { passport.authenticate('local', function(err, user, info) { if (err) { return next(err); } if (!user) { return res.redirect('/'); } req.logIn(user, function(err) { if (err) { return next(err); } return res.redirect('/home.html); }); })(req, res, next); }); ITERATOR,你正面临这个问题(请谷歌这个概念:))。

Iterator是具有“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