在CSV文件中打印行?

6

这是我的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 这会打印出所有的行,而提问者只想要第一行。 - Pierre Barre
@roganjosh 当我第一次回答这个问题时,我也做了同样的事情。 - Pierre Barre
@roganjosh 如果你只需要一个项目,为什么要设置一个for循环呢?这就是next的作用。此外,for循环本身在幕后调用了next - Moses Koledoye
@MosesKoledoye,这正是我建议“或选择更加优雅的解决方案”的原因。我已经看到了你的答案,它比我在评论中能够表达的更好。 - roganjosh
3个回答

9

row[1] 给出了 row 中的第二个元素(因为它从0开始计数)。你想要所有的 row 元素,用空格分隔。你可以使用 " ".join(row) 替换 row[1] 来修复它。其中 " " 是我们希望每个项之间用来分隔的内容,而 row 是我们想要分隔的列表。

完整代码:

import csv

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

1
你的代码将会打印每一行。 - Pierre Barre

7
放弃使用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
< p > reader 对象是一个迭代器,调用 next 方法将提供下一个项目,这里是第一行。请注意,这会推进迭代器,并且后续的迭代将从第二行开始。


2
使用 join
import csv

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

1
每一行都是一个仅包含一个元素的列表,因为默认分隔符是逗号。调用 join 可能是不必要的。 - Moses Koledoye
你能详细说明一下吗? - SeedofWInd

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接