我必须从文件中读取到2D列表中。 该文件看起来像:
杰克32 佩里12
蒂姆14
等
当我打印列表时,它看起来像:
['Jack 32', 'Perry 12', 'Tim 14']
但我需要它看起来像:
['Jack', '32', 'Perry', '12', 'Tim', '14']
到目前为止,我的代码看起来像这样:
with open('filelocation', 'r') as f:
content = f.readlines()
content = [x.strip('\n') for x in content]
print(content)
答案 0 :(得分:3)
难道你不能把整个文件拆分成空格吗?
>>> with open('filelocation') as f:
print(f.read().split())
['Jack', '32', 'Perry', '12', 'Tim', '14']
没有必要创建结构只是为了将它弄平。
答案 1 :(得分:1)
使用空格作为分隔符(默认),为['Jack 32', 'Perry 12', 'Tim 14']
中的每个元素拆分字符串。
迭代结果列表以使其变平。
mylist = ['Jack 32', 'Perry 12', 'Tim 14']
my_new_list = []
for l in mylist:
my_new_list.extend(l.split())
或者,您可以使用生成器
答案 2 :(得分:1)
你应该能够以字符串形式阅读并在空格上分割。
with open('filelocation') as f:
split_up = f.read().split()
答案 3 :(得分:1)
试试这样:
my_list = []
with open('your_file') as f:
for x in f:
my_list += x.strip().split()
答案 4 :(得分:0)
我认为如果你把列表中的内容拿回来并把它拆分成白色空间,它会给你你想要的东西。
答案 5 :(得分:0)
可能有一个比这个简单的方法
In [46]: a=['Jack 32', 'Perry 12', 'Tim 14']
In [47]: b=[i.split() for i in a ]
In [49]: b
Out[49]: [['Jack', '32'], ['Perry', '12'], ['Tim', '14']]
In [50]: [item for sublist in b for item in sublist]
Out[50]: ['Jack', '32', 'Perry', '12', 'Tim', '14']
答案 6 :(得分:0)
分割每一行后,您可以使用itertools.chain链接元素:
from itertools import chain
with open('filepath') as f:
content = list(chain.from_iterable(x.split() for x in f))
print(content)
['Jack', '32', 'Perry', '12', 'Tim', '14']
您无需调用.readlines
,您可以遍历文件对象f
。 line.strip("\n")
只是剥离换行符,你实际上并没有拆分。如果您在每一行上调用split,您最终会得到一个列表,例如[['Jack', '32'], ['Perry', '12'], ['Tim', '14']]
,chain.from_iterable
将每个子列表中的元素链接到一个列表中。
.readlines
一次将所有行读入内存,对于小文件无关紧要,但如果您有大文件或受限内存,则应避免调用.read
或.readlines
。
答案 7 :(得分:0)
为什么不将文件流式传输到新行之间有空格的字符串中,然后用空格分割?
无论如何,您要做的就是按空间划分。
我知道这不是“最性感”的答案,但对你的用例来说可能是最直接的。