在Python中将文本文件拆分为列和行

4 投票
5 回答
39142 浏览
提问于 2025-04-16 13:20

我有个新手问题。需要帮助把一个文本文件分成列和行。假设我有一个这样的文件:

1 2 3 4

2 3 4 5

我想把它放进一个叫做 values = [[]] 的二维列表里。

我能把它分成行,这段代码可以正常工作:

values = map(int, line.split(','))

但我不知道怎么把同样的操作应用到列上,文档里的说明让我看不懂。

谢谢!

5 个回答

1

首先,你需要通过某种方法把数据导入到你的程序里。这里有一个例子:

f = open(tetxfile, 'r')
buffer = f.read()
f.close()

接下来,把这个数据缓冲区解析成一个表格(注意:strip()这个函数是用来去掉末尾的空格的):

table = [map(int, row.split()) for row in buffer.strip().split("\n")]

>>> print table
[[1, 2, 3, 4], [2, 3, 4, 5]]

如果你想要的是有序对,那就把这个表格转置一下:

transpose = zip(*table)
>>> print transpose
[(1, 2), (2, 3), (3, 4), (4, 5)]
1
import csv
import itertools

values = []

with open('text.file') as file_object:
    for line in csv.reader(file_object, delimiter=' '):
        values.append(map(int, line))

print "rows:", values
print "columns"
for column in itertools.izip(*values):
    print column

输出结果是:

rows: [[1, 2, 3, 4], [2, 3, 4, 5]]
columns:
(1, 2)
(2, 3)
(3, 4)
(4, 5)
6
f = open(filename,'rt')
a = [[int(token) for token in line.split()] for line in f.readlines()[::2]]

在你上面的示例文件中,每一行数据之间都有一个空行。我考虑到了这一点,但如果你不想在数据中有这个额外的空行,可以去掉::2这个部分。

补充:我添加了转换为整数的部分 - 你也可以使用map,不过我觉得把列表推导和map混在一起看起来不太好。

撰写回答