2012-01-21 27 views
0

我正在使用Python的csv模塊。我對CSV File Reading and Writing guide有很好的看法。我想寫一個循環遍歷CSV文件中的每一行,併爲每行分配一個不同的變量。有沒有人有任何想法呢?Python csvreader單獨行

我知道有一個.next().line_num,我不認爲這些將適合在這種情況下,雖然我可能是錯的。

目前,我有下面的代碼,它打印出整個CSV文件:

print_csv = csv.reader(open(csv_name, 'rb'), delimiter=' ', quotechar='|') 
for row in print_csv: 
    print ', '.join(row) 

[編輯]

我現在知道,從這個問題的線程,即以最好的方式這將取決於第一行將被用於什麼。

我想要處理CSV文件的第一行是檢查它是否是正確的格式。這將涉及:

  • 檢查,看看是否有列

  • 檢查,看看列標題是否具有正確的名稱

  • 檢查,看的預期數量是否列按正確的順序。

+0

爲什麼要爲x行生成x變量?是不是一個適合存儲行的列表? – Oleiade

+0

@oleiade我想,例如,檢查CSV文件中的第一行是否使用正確的格式。我認爲做到這一點的最好方法是將線條分解成不同的變量。 –

+0

那麼你可以完美地插入列表或字典中的每一行,然後使用它們的索引獨立地訪問每行,對不對? :) 隨着你描述的問題,你完全可以做my_check_function(my_lines_list [0]):-) – Oleiade

回答

2

1.-快速回答

而不是設置不同的獨立變量,你可以這樣做:

mydict = {} 
for idx, item in enumerate(reader): 
    mydict['var%i' %idx] = item 

那麼你打電話給你的變種,如:

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 
+0

感謝您的答覆。我打算繼續使用它,並且使用列表而不是將每行分隔到單獨的變量中。 –

0

好,可以很明顯的事:

var1 = reader.next() 
var2 = reader.next() 
var3 = reader.next() 
var4 = reader.next() 
var5 = reader.next() 

或其任何變化。這不是我最喜歡的編碼風格,但它的工作原理。