我正在使用Python的csv模块。我好好看看CSV File Reading and Writing guide。我想编写一个循环,遍历CSV文件中的每一行,并指定每行执行不同的变量。有没有人对此有任何想法?
我知道有一个.next()
和.line_num
,我不认为这些在这种情况下是合适的,尽管我可能错了。
目前我有以下代码,它打印出整个CSV文件:
print_csv = csv.reader(open(csv_name, 'rb'), delimiter=' ', quotechar='|')
for row in print_csv:
print ', '.join(row)
[修改
我现在知道,从这个问题主题来看,最好的方法取决于第一行的用途。
我想要对CSV文件的第一行做的是检查它是否格式正确。这将涉及:
检查是否有预期的列数
检查列标题是否具有正确的名称
检查列是否按正确顺序排列。
答案 0 :(得分:2)
1.-快速回答
您可以执行以下操作,而不是设置不同的自变量:
mydict = {}
for idx, item in enumerate(reader):
mydict['var%i' %idx] = item
然后你打电话给你的var:
mydict['var0']
或者在py3k中更短:
mydict = {'var%i' %idx : item for idx, item in enumerate(reader)}
但这并没有多大意义应用
正如评论者所说,这与直接做的没什么不同:
mylist = list(reader)
然后
mylist[0] # instead of 'var0'
这个选项要好得多。
当您从同一个读取器行中提取字典键时,字典策略最适合。例如,如果它位于pos pos 0,:
mydict = {item[0] : item for item in reader}
2.-正确答案
但如果您想要的只是检查第一行的格式(可能是为了计算打印所需的空间),方法可能是:
line = reader.next()
like_this = check_how_is_my(line)
if like_this == 'something_long':
spaces = 23
else:
spaces = 0
while True:
try:
print_with_spaces(line, spaces)
reader.next()
except StopIteration:
break
答案 1 :(得分:0)
嗯,你显然可以这样做:
var1 = reader.next()
var2 = reader.next()
var3 = reader.next()
var4 = reader.next()
var5 = reader.next()
或其任何变体。这不是我最喜欢的编码风格,但它确实有效。