【问题标题】:Get only the required lines from a csv file using python使用 python 从 csv 文件中仅获取所需的行
【发布时间】:2013-11-22 18:13:29
【问题描述】:

如何使用 python 从 csv 文件中获取每 3 行?

import csv

with open ('data.csv','r') as infile:
    contents = csv.reader(infile, delimiter =' ')
then???

csv 文件如下所示:

aaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbb
only recquired line
cccccccccccccccccccccccccc
ddddddddddddddddddddddddd
only recquired line

结果应该是这样的:

only recquired line
only recquired line

【问题讨论】:

  • @aIKid 请看更新后的问题
  • 不,请看我的回答。

标签: python csv python-3.x


【解决方案1】:

为避免将整个文件加载到内存中,您可以使用itertools.islice

from itertools import islice
with open ('data.csv','r') as infile:
    x = islice(infile, 2, None, 3)
    for line in x:
            print line

【讨论】:

  • 有趣,我以前从未见过。为什么第二个参数(start)是2?
  • @SteveP。由于 OP 需要每隔三行,开始设置为 2(文件中第三行的索引)
  • +1 啊,不知为何,我以为是每三行,但从第一行开始……
【解决方案2】:
for index, line in enumerate(fileOfInterest, 1):
   if index % 3 == 0:
       doSomething

或者,您可以使用 python 的 extended slice 表示法,如下所示:

for line in fileOfInterest[2::3]
   doSomething

但是,1_CR 的答案是我会选择的答案!

【讨论】:

    【解决方案3】:
    with open('test.csv') as hf:
        print [line for line in list(hf)[2::3]]
    

    【讨论】:

      【解决方案4】:

      使用extended slice notation

      for i in contents.splitlines(True)[2::3]:
          print (i)
      

      【讨论】:

      • 如果你真的需要在换行符上拆分,你不妨使用splitlines 传入keepends=True
      • 好主意。我会补充的。
      • 应该是contents.splitlines(True)[2::3]
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-10-09
      • 1970-01-01
      • 2013-09-21
      • 2013-10-24
      • 1970-01-01
      • 2018-11-02
      • 1970-01-01
      相关资源
      最近更新 更多