我有一个文本文件trial.txt(文件内仅包含3个数字 9 23 4 ),并希望在每个空格处将其拆分。
我需要输出:['9']
,['23']
,['4']
import re
fhandle = open('trial.txt')
fread = fhandle.read()
new_list = []
print(fread)
for num in fread:
num_split = num.split(' ')
new_list.append(num_split)
print(new_list)
我得到的输出是:
[['9'], [' '], ['2'], ['3'], [' '], ['4']]
基本上每个数字都被拆分(即23被拆分为['2']
,['3']
而不是['23']
我也尝试使用正则表达式num_split = num.split('\\s+')
但是输出结果与上面显示的相同。
任何想法为何如此。 谢谢
答案 0 :(得分:1)
这是由fread
循环引起的。由于fread
是第4行(fread = fhandle.read()
)中分配的字符串,因此,对该字符串进行循环将导致Python遍历该字符串的每个字符,在您的情况下,'9 23 4'
变为{{ 1}}。
相反,您可以执行以下操作:
['9', ' ', '2', '3', ' ', '4']
应分别输出with open('trial.txt') as f:
fread = f.read()
print(fread)
new_list = fread.split()
print(new_list)
和'9 23 4'
。
答案 1 :(得分:0)
欢迎使用StackOverflow!
仅当输入为多行时,您的代码才有效,例如:
9
23
4
代替9 23 4
(单行)。因此,它会遍历每个字符。
如果您仍然希望将输入保持在一行,则不需要for循环。您可以简单地使用new_list = num.split(' ')
。否则,您的代码应适用于多行输入。
答案 2 :(得分:0)
似乎您有时有两个空格。您可以改为执行以下操作:
import re
fhandle = open('trial.txt')
fread = fhandle.read()
new_list = []
print(fread)
for num in fread:
num_split = findall(r'\s?(s*\S+)', num.rstrip())
new_list.append(num_split)
print(new_list)
正则表达式详细信息: