在python中读取文本文件并将其拆分为单个单词

2024-05-23 19:15:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个由数字和单词组成的文本文件,例如-09807754 18 n 03 aristocrat 0 blue_blood 0 patrician,我想分割它,以便每个单词或数字都作为新行出现。

空白分隔符是理想的,因为我希望带破折号的单词保持连接。

这就是我目前所拥有的:

f = open('words.txt', 'r')
for word in f:
    print(word)

不太确定如何从这里开始,我希望这是输出:

09807754
18
n
3
aristocrat
...

Tags: txt数字blueopen单词空白wordwords
3条回答

作为补充, 如果您正在读取一个非常大的文件,并且不希望一次将所有内容读入内存,则可以考虑使用缓冲区,然后按结果返回每个单词:

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)

给定此文件:

$ cat words.txt
line1 word1 word2
line2 word3 word4
line3 word5 word6

如果一次只需要一个单词(忽略文件中空格和换行符的含义):

with open('words.txt','r') as f:
    for line in f:
        for word in line.split():
           print(word)    

印刷品:

line1
word1
word2
line2
...
word6 

类似地,如果要将文件flatten放入文件中的单个单字列表中,可以执行以下操作:

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解决方案,它将允许您筛选示例文件中的wordNlineN类型的单词:

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))
f = open('words.txt')
for word in f.read().split():
    print(word)

相关问题 更多 >