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

时间:2011-03-09 12:02:44

标签: python

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

1 2 3 4

2 3 4 5

我希望将其放入名为values = [[]]

的二维列表中

我可以让它给我行好的,这段代码可以正常工作:

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

我只是不知道我怎么能说同样的事情,但对于行和文档没有任何意义

欢呼声

5 个答案:

答案 0 :(得分:4)

f = open(filename,'rt')
a = [[int(token) for token in line.split()] for line in f.readlines()[::2]]

在上面的示例文件中,每个数据行之间都有一个空行 - 我考虑了这一点,但如果您不想在数据中添加额外行,则可以删除::2下标

编辑:添加转换为int - 您也可以使用map,但混合列表推导和map对我来说似乎很难看。

答案 1 :(得分: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)

答案 2 :(得分: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)]

答案 3 :(得分:0)

您可以尝试使用CSV-module。您可以指定自定义分隔符,因此它可能有效。

答案 4 :(得分:0)

如果列由空格分隔

import re

A,B,C,D = [],[],[],[]
pat = re.compile('([^ ]+)\s+([^ ]+)\s+([^ ]+)\s+([^ ]+)')

with open('try.txt') as f:
    for line in f:
        a,b,c,d = pat.match(line.strip()).groups()
        A.append(int(a));B.append(int(b));C.append(int(c));D.append(int(d))

csv 模块

修改

A,B,C,D = [],[],[],[]    
with open('try.txt') as f:
    for line in f:
        a,b,c,d = line.split()
        A.append(int(a));B.append(int(b));C.append(int(c));D.append(int(d))

但如果数据元素之间有多个空格,则此代码将失败

编辑2

因为使用正则表达式的解决方案非常难以理解,所以可以按如下方式清除:

import re

A,B,C,D = [],[],[],[]
pat = re.compile('\s+')

with open('try.txt') as f:
    for line in f:
        a,b,c,d = pat.split(line.strip())
        A.append(int(a));B.append(int(b));C.append(int(c));D.append(int(d))