python - 如何在 for 构造之外迭代读取 Python reader?

标签 python csv iterator

我编写了这段代码,它按顺序打印行:

with open(filename, 'r') as csvfile:
    rder = csv.reader(csvfile, delimiter=',')
    for row in rder:
        print(row)

是否可以使用 hasNextnext 方式访问 rder ,即没有 for 构造?例如,如何跳过第一行?

问题很笼统,我想了解一下,能够留在in之前是什么意思。在 Java 中,这意味着 Iterable界面,我可以轻松找到它的文档并知道我可以用它做什么。

在Python中,我找不到有关reader函数返回的内容的信息,并且我不知道可以用它做什么,除了what is written in example 。该示例仅与 for 一起使用。

我可以选择其他的吗?

最佳答案

csv.reader 返回 iterator .

迭代器可以通过 infor 循环中使用:

所以这个:

import csv
rder = csv.reader(my_csv(), delimiter=' ')
for row in rder:
    print(row)

给出:

['A', 'header', 'row']
['some', 'data']
['some', 'more', 'data']
['A', 'footer']

可以使用 next() 在 for 循环内读取迭代器:

如果我们需要在 for 循环中使用一行,我们可以这样做:

rder = csv.reader(my_csv(), delimiter=' ')
for row in rder:
    print(row)
    print('Grabbed one:', next(rder))

给予:

['A', 'header', 'row']
Grabbed one: ['some', 'data']
['some', 'more', 'data']
Grabbed one: ['A', 'footer']

迭代器也可以在 for 循环之外使用:

rder = csv.reader(my_csv(), delimiter=' ')
print('first one:', next(rder))
print('second one:', next(rder))
for row in rder:
    print(row)

将给出:

first one: ['A', 'header', 'row']
second one: ['some', 'data']
['some', 'more', 'data']
['A', 'footer']

测试数据:

from io import StringIO

def my_csv():
    return StringIO('\n'.join([x.strip() for x in u"""
        A header row
        some data
        some more data
        A footer
    """.split('\n')[1:-1]]))

关于python - 如何在 for 构造之外迭代读取 Python reader?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42982139/

相关文章:

python - 在测试用例(单元测试)中,无法捕获 Django pre_save 信号

Python 在 linux 上找不到 CasADi

java - 在 CSV 写入中转义 ',' 不起作用

python - 连接生成器和项目

python - 向类添加装饰函数

python - 如何根据其他列的值估算 NaN 值?

ms-access - 在 VBA 中 Access 数据项目导入 CSV 文件

c# - 如何使用分隔 rune 本符号 (<) 而不会在我的网页上出现 HTML 错误?

c++ - 使用模板参数在模板类中定义一对迭代器

java - 在迭代java期间修改集合