从 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 设置语言环境?