Python:追加由多行构成的字符串以列出

时间:2016-03-16 16:09:06

标签: python string list parsing append

我正在尝试解析txt文件并将句子放入符合我标准的列表中。 文本文件由几千行组成,我正在查找以特定字符串开头的行,让我们调用此字符串'start'。 此文本文件中的行可以属于一起,并以某种方式随机分隔\n

这意味着我必须查找以'start'开头的任何字符串,将其置于空字符串'complete'中,然后继续扫描每一行,看看它是否也以'start'开头。

如果没有,那么我需要将其附加到'完成',因为它是整个句子的一部分。如果确实如此,我需要将“完成”附加到列表中,创建一个新的空“完整”字符串并开始追加到该字符串。这样我就可以循环遍历整个文本文件,而无需关注句子存在的行数。

我的代码因此:

import sys, string
lines_1=[]
startswith = ('keys', 'values', 'files', 'folders', 'total')
completeline = ''

with open (sys.argv[1]) as f:
    data = f.read()
for line in data:
    if line.lower().startswith(startswith):
        completeline = line
    else:
        completeline += line

lines_1.append(completeline)

# check some stuff in output
for l in lines_1:
    print "______"
    print l
print len(lines_1)

然而,这会将整个内容放在列表中的1个项目中,我希望将所有内容分开。

请记住,组成一个句子的行可以跨越一行,两行,10行或1000行,因此需要发现下一个startswith值,将现有completeline附加到列表中然后填写completeline下一句话。

非常有责任!

2 个答案:

答案 0 :(得分:0)

对于像这样的任务

"我试图解析一个txt文件并将句子放入符合我标准的列表中#34;

我通常更喜欢使用字典来表达这种想法,例如

from collections import defaultdict
seperatedItems = defaultdict(list)

for sentence in fileDataAsAList:
     if satisfiesCriteria("start",sentence):
          seperatedItems["start"].append(sentence)

def satisfiesCriteria(criteria,sentence):
     if sentence.lower.startswith(criteria):
         return True

     return False

这样的东西应该足够......代码只是为了让你了解你可能想做什么..你可以有标准列表并循环它们,这将把与不同creterias相关的句子添加到这样的字典中

mycriterias = ['开始','开始','无论']

for criteria in mycriterias:
    for sentence in fileDataAsAList:
       if satisfiesCriteria(criteria ,sentence):
           seperatedItems[criteria ].append(sentence)

注意拼写:p

答案 1 :(得分:0)

两个问题:

  1. 迭代字符串,而不是行:
  2. 当你遍历一个字符串时,产生的值是一个字符,而不是一行。这意味着for line in data:在字符串中逐字逐句。按换行符拆分输入,返回一个列表,然后迭代。例如for line in data.split('\n'):

    1. 覆盖循环内的完整行
    2. 在循环结束时追加一条完整的行,但在循环内开始记录新行时则不行。将循环中的if更改为以下内容:

      if line.lower().startswith(startswith):
          if completeline:
              lines_1.append(completeline)
          completeline = line