【问题标题】:How to print first 5 lines of a sorted csv file? [duplicate]如何打印已排序 csv 文件的前 5 行? [复制]
【发布时间】:2021-02-22 14:55:18
【问题描述】:

在下面的代码中,我需要从 CSV 文件“winners.csv”中打印出前 5 行,但我不知道该怎么做。我只知道第 4-5 行会导致 csv 文件中的所有行都打印出来。

有问题的代码:

wins = open("winners.csv", "r")
csv1 = csv.reader(wins, delimiter=",")
sort = sorted(csv1,key=operator.itemgetter(1),reverse=True)
for eachline in sort:
    print(eachline)
wins.close()

【问题讨论】:

  • 您的问题具有误导性。您不需要文件的前 5 行。 sorted() 总是返回一个列表,所以你只需要列表的前 5 个元素...
  • @Tomerikoo:它被链接到错误的副本——如果它是另一个副本,可以再次关闭。

标签: python csv sorting


【解决方案1】:

不是循环遍历sort 中的所有元素,而是遍历前五个。

wins = open("winners.csv", "r")
csv1 = csv.reader(wins, delimiter=",")
sort = sorted(csv1,key=operator.itemgetter(1),reverse=True)
for eachline in sort[:5]: # <----- note how sort is changed to sort[:5]
    print(eachline)
wins.close()

与您的问题没有直接关系,只是提到一个好的做法。建议使用with 打开文件。异常处理,读取完成后关闭文件等将为您完成,您的代码将更清晰。

with open("winners.csv", "r") as wins:
    csv1 = csv.reader(wins, delimiter=",")
    sort = sorted(csv1,key=operator.itemgetter(1),reverse=True)
    for eachline in sort[:5]:
        print(eachline)

【讨论】:

    【解决方案2】:

    enumerate 函数允许您获取迭代器的值和索引。

    所以你可以检查你打印了多少行并跳出循环:

    with open('winners.csv', 'r') as f:
        for index, line in enumerate(f):
            print(line)
            if index >= 5:
                break
    

    【讨论】:

      【解决方案3】:

      这里可以使用切片和with(确保文件流已经关闭):

      import csv,operator
      with open("winners.csv", "r") as wins:
        csv1 = csv.reader(wins, delimiter=",")
        sort = sorted(csv1,key=operator.itemgetter(1),reverse=True)
        for eachline in sort[:5]: 
          print(eachline)
      

      pandas 最简单:

      import pandas as pd
      df = pd.read_csv('winners.csv').head(5)
      

      【讨论】:

      • 熊猫解决方案不等价,因为它不排序...
      猜你喜欢
      • 2017-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-24
      • 2016-09-02
      • 1970-01-01
      • 1970-01-01
      • 2022-11-24
      相关资源
      最近更新 更多