只读入某些字符串Python之间的行

时间:2016-10-27 19:16:58

标签: python csv

所以我有一个文本文件,我试图用python中的csv读取,但是我只希望两行之间的行以某些字符串开头。我只是阅读数据没有问题,我有:




  import csv
 open('path to file','r')as INF:
 reader = csv.reader(inf,delimiter =“”)
  




并获取我可以循环并追加的所有数据列表:




  raw_data = []
对于读者中的行:
 raw_data.append(row)
  




我知道我可以通过以下方式获取我想要的行:

&#xA ;

  for raw_data中的行:
如果row [0] =='string1':
 begin_idx = raw_data.index(row)
 elif row [0] =='string2':
 end_idx = raw_data.index(row)
 data = []
对于范围内的idx(begin_idx + 1,end_idx):
 data.append(raw_data [idx])
  




但是,当我第一次循环时,我希望能够一次完成所有这些操作通过文本文件,所以如果有人对如何做到这一点有任何想法,那将不胜感激。





注意,我之所以不只是寻找行索引的原因我想要的是因为它们只是一个整数列表,每次运行时它都会改变。我运行的pdf到文本转换不是非常干净,因此行标题不与行的实际数据对齐。




2 个答案:

答案 0 :(得分:2)

Iterator对象很不错,因为在使用next()时,他们只是在reader这样的对象上调用in 因此,当您点击起始字符串时,这将允许您通过单独循环遍历一个线性传递。试试这个:

import csv
with open('path to file','r') as inf:
    reader = csv.reader(inf, delimiter=" ")

data=[]
for row in reader:
    if row[0] == 'string1':
        for row in reader:
            if row[0]=='string2':
                break
            data.append(row)

答案 1 :(得分:0)

您可以在for循环中引入状态变量:

data = []
copying = False
for row in reader:
    if copying:
        data.append(row)
    if row[0] == 'string1':
        copying = True
    if row[0] == 'string2':
        copying = False