我有一个新手问题。我需要帮助将文本文件分成列和行。假设我有一个这样的文件:
1 2 3 4
2 3 4 5
我希望将其放入名为values = [[]]
我可以让它给我行好的,这段代码可以正常工作:
values = map(int, line.split(','))
我只是不知道我怎么能说同样的事情,但对于行和文档没有任何意义
欢呼声
答案 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))