Python csvreader分隔行

时间:2012-01-21 11:59:11

标签: python loops csv

我正在使用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文件的第一行做的是检查它是否格式正确。这将涉及:

  • 检查是否有预期的列数

  • 检查列标题是否具有正确的名称

  • 检查列是否按正确顺序排列。

2 个答案:

答案 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()

或其任何变体。这不是我最喜欢的编码风格,但它确实有效。