从 csv.reader 生成的列表不循环

Posted

技术标签:

【中文标题】从 csv.reader 生成的列表不循环【英文标题】:List generated from csv.reader not looping 【发布时间】:2022-01-13 19:10:57 【问题描述】:

python 新手,因此欢迎任何关于简单、鼓舞人心、模块等的建议。

尝试创建一个可以在 csv 中搜索值的脚本(在这种情况下抓取标题字段),然后将这些值索引为变量。我能够从 CSV 中获取标题,但我无法让列表循环遍历这些值。是的,我可以在原始循环中创建第二个循环,但这不是预期的行为。我错过了什么?

import csv

data = [['SKU', 'Color', 'Delivery', 'Angles'], ['A1234', 'Red', 'Week 1', 'On-model, Pinup'], ['B4321', 'Black', 'Week 2', 'On-model'], ['JJ4567', 'Blue-Multi', 'Week 1', 'Pinup'], ['ClassicTee', 'Pink', 'Week 3', 'On-model, Pinup, Detail']]

with open('SKU_test3.csv', 'w') as csv_file_write:
   ​csv_writer = csv.writer(csv_file_write, delimiter=',')
   ​for row in data:
       ​csv_writer.writerow(row)

with open('SKU_test3.csv', 'r+') as csv_file_append:
   ​csv_reader = csv.reader(csv_file_append, delimiter = ',')
   ​header_names = []
   ​for row in csv_reader:
       ​header_names.append(row)
       ​break

print(type(header_names)) # returns: <class 'list'>

for i in header_names:
   ​print(i) # returns: ['SKU', 'Color', 'Delivery', 'Angles']

for j in i:
    print(j) # returns items as expected, but why is a nested loop needed?

【问题讨论】:

为什么会有一个带有无条件break 的循环?这不是循环。 这是由另一个 CSV 循环拼凑而成的,该循环根据循环的迭代执行多项操作。所以是的,这里不需要循环/中断。 【参考方案1】:

您将标题列表嵌套在 header_names 列表中。您应该直接分配它而不是使用append()

with open('SKU_test3.csv', 'r+') as csv_file_append:
   ​csv_reader = csv.reader(csv_file_append, delimiter = ',')
   ​header_names = next(csv_reader)

如果您只想要生成器的第一个元素,您可以使用next() 而不是循环的单次迭代。

【讨论】:

谢谢,这解决了问题。嵌套列表没有显示为 [['SKU', 'Color', 'Delivery', 'Angles']] 是否有原因? 如果你这样做了print(header_names),你就会看到它

以上是关于从 csv.reader 生成的列表不循环的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Python 中为 csv.reader 设置语言环境?

使用 Python 的 csv.reader 处理转义引号

python csv 模块reader后转换为列表

使用 Python csv.reader 从文本文件中删除 html 格式“>”

CSV 到 JSON 使用循环

使用循环从文件中读取和提取有用数据无法生成值列表