def read_words(inputfile):
with open(inputfile, 'r') as f:
while True:
buf = f.read(10240)
if not buf:
break
# make sure we end on a space (word boundary)
while not str.isspace(buf[-1]):
ch = f.read(1)
if not ch:
break
buf += ch
words = buf.split()
for word in words:
yield word
yield '' #handle the scene that the file is empty
if __name__ == "__main__":
for word in read_words('./very_large_file.txt'):
process(word)
with open('words.txt') as f:
flat_list=[word for line in f for word in line.split()]
>>> flat_list
['line1', 'word1', 'word2', 'line2', 'word3', 'word4', 'line3', 'word5', 'word6']
它可以创建与第一个示例相同的输出,print '\n'.join(flat_list)。。。
或者,如果要在文件的每一行中嵌套单词列表(例如,要从文件创建行和列的矩阵):
with open('words.txt') as f:
matrix=[line.split() for line in f]
>>> matrix
[['line1', 'word1', 'word2'], ['line2', 'word3', 'word4'], ['line3', 'word5', 'word6']]
如果您想要一个regex解决方案,它将允许您筛选示例文件中的wordN与lineN类型的单词:
import re
with open("words.txt") as f:
for line in f:
for word in re.findall(r'\bword\d+', line):
# wordN by wordN with no lineN
或者,如果您希望它是带正则表达式的逐行生成器:
with open("words.txt") as f:
(word for line in f for word in re.findall(r'\w+', line))
作为补充, 如果您正在读取一个非常大的文件,并且不希望一次将所有内容读入内存,则可以考虑使用缓冲区,然后按结果返回每个单词:
给定此文件:
如果一次只需要一个单词(忽略文件中空格和换行符的含义):
印刷品:
类似地,如果要将文件flatten放入文件中的单个单字列表中,可以执行以下操作:
它可以创建与第一个示例相同的输出,
print '\n'.join(flat_list)
。。。或者,如果要在文件的每一行中嵌套单词列表(例如,要从文件创建行和列的矩阵):
如果您想要一个regex解决方案,它将允许您筛选示例文件中的
wordN
与lineN
类型的单词:或者,如果您希望它是带正则表达式的逐行生成器:
相关问题 更多 >
编程相关推荐