python - 使用csv.dictreader时跳过行

时间:2013-11-25 10:24:22

标签: python csv

这是此问题的后续行动 - 2d list in python

@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)

但这似乎不起作用。任何帮助,将不胜感激。 感谢

1 个答案:

答案 0 :(得分:1)

你可以在循环中循环,获得下一行,直到你结束:

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)