1

我有一个像这样的文本文件

1;2;3;4
5;6;7;8

我想将其转换为:

[[1,2,3,4],[5,6,7,8]]

使用 Python,我怎样才能做到这一点?*

4

5 回答 5

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=';'))
于 2012-12-21T00:28:52.617 回答
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]]
于 2012-12-21T00:32:02.307 回答
3

由于您的数据似乎是某种类似于 CSV 的数据,为什么不使用 python 的csv 解析模块呢?它可以免费处理编码并支持分隔符。

如果您只想要一些代码,请使用列表推导并使用以下split方法进行拆分str

result = [line.split(';') for line in text.split("\n")]
于 2012-12-21T00:31:50.497 回答
3

'1;2;3;4'.split(';')[1, 2, 3, 4]将从string生成列表'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]
于 2012-12-21T00:31:55.537 回答
0

感谢您提出有趣的问题,可以通过 2 个 map 和 1 个 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')))
于 2012-12-21T02:08:26.263 回答