2013-11-25 46 views
0

這是跟進這個問題 - 2d list in python蟒蛇 - 跳過線同時使用csv.dictreader

通過@Kroolik答案解決我的問題,但我卡在另一件事

考慮我的文件被如下所示

junk.... 
junk.... 
junk 
required.... 
junk... 
required.... 
junk... 

當我讀到thro csv.dictreader時,如何跳過垃圾行?另外,我只知道中間的第一個和最後一個「必需」和「垃圾」。最初的「垃圾」可以是任何東西和任何數量的線。

我試過下面

version_new = open(file_version_new, 'r') 
flag = 0 
for row in version_new: 
    if "JID" in row: 
     flag = 1 #starting of the 'required section 
    if "Total text" in row: 
     flag = 2 #end of required section 
    if flag == 1: 
     list_top_version_new.append(row.split()) 
    if flag == 2: 
     #do something 

reader = csv.DictReader(list_top_version_new) 
for line in reader: 
    print(line) 

,但這似乎沒有工作。任何幫助,將不勝感激。 感謝

回答

0

您可以在循環中循環,得到了下一行,直到你在最後:

for row in version_new: 
    if "JID" in row: 
     # in required section, loop until end: 
     for row in version_new: 
      if "Total text" in row: 
       break 
      list_top_version_new.append(row) 
    # Anything outside of the required section is ignored. 

注意,不需要row.split(); csv.DictReader爲您提供了一個字典對象,該行已經被分割成了數值。

list_top_version_new也是一個詞典列表,不需要再通過csv.DictReader()。而且,由於您已經循環輸入文件的那一部分,爲什麼不直接在該循環中使用來完成您的工作?因此,而不是在最後的一環在list_top_version_new的,你需要與該行做力所能及的工作取代list_top_version_new.append(row)

for row in version_new: 
    if "JID" in row: 
     # in required section, loop until end: 
     for row in version_new: 
      if "Total text" in row: 
       break 
      print(row) 
+0

感謝。如果你看到我已經[鏈接]的帖子(http://stackoverflow.com/questions/20036271/2d-list-in-python-accessing-through-column-names),我使用csv.Dictreader因爲它會自動將列名作爲鍵,這是我主要關心的問題。 – Ananth

+0

是的,你只是沒有正確使用它。 –

+0

對不起,我的壞!刪除'拆分'工作正常。謝謝 – Ananth