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

标签 python string split

我有这个由数字和单词组成的文本文件,例如像这样 - 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
...

最佳答案

鉴于此文件:

$ 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']]

如果您想要一个正则表达式解决方案,这将允许您在示例文件中过滤 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))

关于python - 读取文本文件并在 python 中将其拆分为单个单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16922214/

相关文章:

python - 将字符串中的每个字母加倍

python - RabbitMQ 是否能够将消息传递给特定的客户端?或者我必须在客户端执行这些检查吗?

c - 如何在 C 中使用 fscanf() 来识别被识别为字符串的模式?

string - 计算 Tcl 8.0 上子字符串的出现次数

for循环中的Python变量范围

python - Scikit Learn 模型给出 'LocalOutlierFactor' 对象没有属性 'predict' 错误

java - JSONObject 无法转换为 java.lang.String

bash - 更改 [split] 中的输出文件名

Javascript 不会使用正则表达式进行分割

java - 将基于案例编号的对象列表拆分为新的对象列表