【问题标题】:python - skipping lines while using csv.dictreaderpython - 使用 csv.dictreader 时跳过行
【发布时间】:2013-12-09 23:30:12
【问题描述】:

这是对这个问题的跟进 - 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)

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

【问题讨论】:

    标签: python csv


    【解决方案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)
    

    【讨论】:

    猜你喜欢
    • 2011-06-14
    • 2012-12-18
    • 2011-11-27
    • 2015-02-26
    • 2015-09-10
    • 2014-03-03
    • 2020-07-23
    • 1970-01-01
    • 2020-12-19
    相关资源
    最近更新 更多