【问题标题】:Print rows in csv file? [duplicate]在csv文件中打印行? [复制]
【发布时间】:2017-04-18 10:00:42
【问题描述】:

这是我的 csv 文件的示例:

1   Ryan    Giggs   £13.50  23  Manchester  Utd
2   David   Beckham £40.00  24  Manchester  Utd
3   Michael Owen    £22.00  22  Liverpool
4   Robbie  Fowler  £21.00  23  Leeds Utd

我编写这段代码的目的是为了打印出第一行:

import csv

with open("Footballers.csv") as f:
    reader = csv.reader(f)
    for row in reader:
        print(row[1])

但是,这只会打印出第一列(技术上是第二列),如下所示:

Ryan
David
Micheal
Robbie

我怎样才能让它像这样打印出第一行?

1 Ryan Giggs £13.50 23 Manchester Utd

【问题讨论】:

  • @roganjosh 这将打印所有行,提问者只想要第一行。
  • @roganjosh 我第一次回答问题时也是这样做的
  • @roganjosh 如果您只需要一项,为什么还要设置 for 循环。这就是next 所做的。除了for 循环本身在幕后调用next
  • @MosesKoledoye 正是我建议“或选择 more elegant 解决方案之一”的原因。我已经看到了你的答案,它的解释比我在评论中的解释要好。

标签: python csv


【解决方案1】:

row[1]row 中给出第二个东西(因为它从 0 开始计数)。你想要所有的row,用空格分隔。您可以将row[1] 替换为" ".join(row) 来修复它。 " " 是我们想要分隔每个项目的东西,row 是我们想要分隔的列表。

完整的代码是

import csv

with open("Footballers.csv") as f:
    reader = csv.reader(f)
    for row in reader:
        print(" ".join(row))

【讨论】:

  • 您的代码将打印每一行。
【解决方案2】:

如果您只打算打印第一行,请删除 for 循环并使用 next,因为 for 会在对象上迭代并连续提供每一行:

with open("Footballers.csv") as f:
    reader = csv.reader(f)
    print(next(reader)[0]) # default separator is a comma so you only get one item in the row

reader 对象是一个迭代器,在它上面调用next 将提供 next 项,在这种情况下是第一行。请注意,这会推进迭代器,随后的迭代将从第二行开始。

【讨论】:

    【解决方案3】:

    使用连接

    import csv
    
    with open("Footballers.csv") as f:
       reader = csv.reader(f)
       for row in reader:
       print(' '.join(row) )
    

    【讨论】:

    • 每一行都是一个只有项目的列表,因为默认分隔符是逗号。可能不需要调用join
    • 你能详细说明吗?
    猜你喜欢
    • 2019-10-16
    • 2021-02-22
    • 2017-12-01
    • 2021-12-06
    • 2013-07-01
    • 2019-07-15
    • 2013-02-12
    • 2012-07-04
    相关资源
    最近更新 更多