[[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), [])]
此语句需要很长时间才能删除空行。有没有更好的方法从列表列表中删除空行并仍然保持显示的格式?
答案 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个或更多倍),因此它将处理多个换行符或多个空格。