如何更快地完成这一特定声明?

时间:2016-03-22 17:47:37

标签: python list

[[u'the', u'terse', u'announcement', u'state-run', u'news', u'agency', u'didnt', u'identify', u'the', u'aggressor', u'but', u'mister', u'has', u'accused', u'neighboring', u'country', u'of', u'threatening', u'to', u'attack', u'its', u'nuclear', u'installations'], [], [u'government', u'officials']]

我想删除空行,由[]上方的空括号表示。我目前正在使用:

with codecs.open("textfile.txt", "r", "utf-8") as f:
    for line in f:
        dataset.append(line.lower().strip().split()) #dataset contains the data above in the format shown
    lines=[sum((line for line in dataset if line), [])]

此语句需要很长时间才能删除空行。有没有更好的方法从列表列表中删除空行并仍然保持显示的格式?

2 个答案:

答案 0 :(得分:2)

您可以在阅读文件时跳过仅限空格的行:

with codecs.open("textfile.txt", "r", "utf-8") as f:
    dataset = [line.lower().split() for line in f if not line.isspace()]

请注意,split()会忽略前导/尾随空格,因此strip()是多余的。

修改

您的问题很不清楚,但从评论中可以看出,您要做的只是读取文件并删除所有空行。如果这是正确的,那么你只需要这样做:

with codecs.open("textfile.txt", "r", "utf-8") as f:
    dataset = [line.lower() for line in f if not line.isspace()]

现在dataset是一个低层线路(即字符串)的列表。如果要将它们组合成一个字符串,可以执行以下操作:

text = ''.join(dataset)

答案 1 :(得分:0)

我有点困惑你为什么这样做:

lines = [sum((line for line in dataset if line), [])]

首先在调用sum周围添加方括号,最后得到一个包含一个元素的列表:sum的结果,不确定是否有意...

无论如何,sum()的结果将是文件中由空格分隔的所有单词的列表,如果这是期望的最终结果,那么您可以简单地使用re.split

with open(...) as f:
    links = [re.split("\W+",f.read())]
    #is it possible you instead wanted:
    #links = re.split("\W+",f.read())

"\W"只是意味着任何空格(" \ n",""," \ t"等等)和{{1}意味着(1个或更多倍),因此它将处理多个换行符或多个空格。