我有一个像这样的文本文件:
1;2;3;4
5;6;7;8
我想将其转换为:
[[1,2,3,4],[5,6,7,8]]
使用Python,我该如何实现这个目标?*
答案 0 :(得分:8)
您可以使用以下内容:
data = [[int(i) for i in line.split(';')] for line in open(filename)]
替代使用csv模块:
import csv
data = [[int(i) for i in ln] for ln in csv.reader(open(filename), delimiter=';')]
如果字符串列表可以接受:
data = [line.split(';') for line in open(filename)]
或csv等价物:
data = list(csv.reader(open(filename), delimiter=';'))
答案 1 :(得分:4)
作为多行字符串:
>>> s = """1;2;3;4
5;6;7;8"""
>>> [[int(x) for x in a.split(';')] for a in s.splitlines()]
[[1, 2, 3, 4], [5, 6, 7, 8]]
答案 2 :(得分:3)
由于您的数据似乎是某种类似CSV的数据,为什么不使用python的csv parsing module?它可以免费处理编码和支持分隔符。
如果您只想要一些代码,请使用列表推导并使用split
的{{1}}方法进行拆分:
str
答案 3 :(得分:3)
'1;2;3;4'.split(';')
会从字符串[1, 2, 3, 4]
生成列表'1;2;3;4'
,因此您只需要为文件中的每一行执行此操作:
def split_lists(filepath, sep=';'):
with open(filepath) as f:
line_lists = []
for line in f:
line_lists.append(line.split(sep))
return line_lists
或更紧凑地理解
def split_lists(filepath, sep=';'):
with open(filepath) as f:
return [line.split(sep) for line in f]
答案 4 :(得分:0)
感谢有趣的问题,可以通过2个地图和一个for循环来解决
s='1;2;3;4\n5;6;7;8'
map(lambda seq: [int(i) for i in seq], map(lambda x:x.split(';'), s.split('\n')))