【问题标题】:How do I print only the first 10 lines from a csv file using Python?如何使用 Python 仅打印 csv 文件的前 10 行?
【发布时间】:2016-09-02 11:30:19
【问题描述】:

我是 Python 新手,我只想打印一个巨大的 csv 文件的前 10 行。

这是我目前打印 csv 文件中所有行的代码

import csv
with open('titanic.csv') as csvfile:
    reader = csv.DictReader(csvfile)
    for row in reader:
        print(row['survived'], row['pclass'], row['name'], row['sex'], row['age'])

【问题讨论】:

    标签: python python-3.x csv


    【解决方案1】:

    你可以在 10 行之后 break

    import csv
    with open('titanic.csv') as csvfile:
        reader = csv.DictReader(csvfile)
        for i,row in enumerate(reader):
            print(row['survived'], row['pclass'], row['name'], row['sex'], row['age'])
            if(i >= 9):
                break
    

    【讨论】:

    • 完美,做到了!我还想使用 , 作为分隔输出行的分隔符。该怎么做呢?
    【解决方案2】:

    使用itertools.islice:

    import csv
    from itertools import islice
    
    with open('titanic.csv') as csvfile:
        reader = csv.DictReader(csvfile)
        for row in islice(reader, 10): # first 10 only
            print(row['survived'], row['pclass'], row['name'], row['sex'], row['age'])
    

    在使用的同时,您还可以使用operator.itemgetter 让专栏变得更轻松:

    import csv
    from itertools import islice
    from operator import itemgetter
    
    get_columns = itemgetter('survived', 'pclass', 'name', 'sex', 'age')
    
    with open('titanic.csv') as csvfile:
        reader = csv.DictReader(csvfile)
        for row in islice(reader, 10): # first 10 only
            print(*get_columns(row))
    

    【讨论】:

    • 恕我直言islice 是矫枉过正,当所有需要做的就是计算到目前为止读取的行...
    • @martineau 也许——但是当你不需要的时候为什么要努力去做呢?它还将逻辑隔离到for,如果您需要从开始偏移或引入步进,那么您不会向if 引入更多逻辑或进行模数等......(更不用说 -使用islice 显然可以在 CPython 的 C 级别完成它的工作)
    • for i in range(10): 也隔离了逻辑,是用C写的。
    【解决方案3】:

    Adrien El Zein 的回答足以回答您的问题。但是,如果您认为这有点令人困惑(我不这么认为):

    import csv
    counter = 0
    
    with open('titanic.csv') as csvfile:
        reader = csv.DictReader(csvfile)
        for row in enumerate(reader):
           print(row['survived'], row['pclass'], row['name'], row['sex'], row['age'])
           counter += 1
           if counter >= 9:
               break
    

    我所做的只是将变量 i 重命名为 counter。另外,对于另一个循环:

    import csv
    counter = 0
    
    with open('titanic.csv') as csvfile:
        reader = csv.DictReader(csvfile)
        for row in enumerate(reader):
           print(row['survived'], row['pclass'], row['name'], row['sex'], row['age'])
           while counter < 10:
               counter += 1
           else:
               break
    

    我使用 Python 3.4.3 尝试并测试了 while-else 循环(不确定您拥有哪个版本)并且可以告诉您它可以正常工作。

    【讨论】:

      【解决方案4】:

      通过选择字段从 csv 文件中获取前 N 行

      #for python 3
      import csv
      from operator import itemgetter
      N=11 # to get 10 rows need use 10+1=11
      fname='titanic.csv'
      get_columns=itemgetter('survived', 'pclass', 'name', 'sex', 'age')
      
      with open(fname,'r') as csvfile:
          reader = csv.DictReader(csvfile.readlines()[0:N])
          [print(*get_columns(row)) for row in reader]
      
           # or for all fields : use [print(row)) for row in reader]
      

      【讨论】:

        猜你喜欢
        • 2016-09-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-12
        • 2017-04-24
        • 2018-02-13
        • 2015-05-08
        • 2021-12-19
        相关资源
        最近更新 更多