将列表转换为Python中的列

时间:2013-11-07 00:56:06

标签: python io text-files

这是我的(缩写)文本文件(格式可能在帖子中丢失):

date    close   volume          open    high    low
12:21   82.94   "14,748,136"    83.37   83.4    82.73

当我将.txt文件读入Python时,它变成了一个列表,然后我将其拆分。我如何获取列表并重新排序到列向量?任何帮助将非常感激。

4 个答案:

答案 0 :(得分:4)

如果您有一个行列表,而您只想将其更改为列列表,则只需执行

transposed_list = zip(*original_list_of_rows)

但如果您有行列表

则不清楚

答案 1 :(得分:0)

据推测,假设您至少有一个值附近有引号,则空格可能会出现在值中。所以,你不能只是split()

可以将其解析为CSV的时髦方言,其中分隔符是空格,并跳过初始空格:

with open('textfile') as f:
    rows = list(csv.reader(f, delimiter=' ', skipinitialspace=True)

这会自动处理你和所有事情的报价。

但是,至少在某些情况下,像这样的柱状数据可能具有完全不分开的值,如下所示:

date    close   volume          open    high    low
12:21   82.94   "14,748,136"    83.37   83.4    82.73
12:22   93213.12"15,222,139"    93201.1493333.3390213.94

如果是这样,那么你只能通过在适当的列位置切片来解析它。如果你很幸运,你可以使用标题;否则,您需要手动指定它们。我假设你不走运,所以:

columns = 0, 7, 15, 31, 39, 47, None
def columnize(line):
    return [line[columns[i]:columns[i+1]].rstrip() for i in range(len(columns)-1)]
with open('textfile') as f:
    rows = map(columnize, f)

答案 2 :(得分:0)

[[x for i,x in enumerate(text.split()) if (i+j)%colNumber==0 ] 
for j in range(colNumber)]

这要求您已经知道列号,并将文本文件格式化为表格。 例如:

text='''a   b   c
1   2   4
1   2   4
1   2   4
'''

colNumber=3
table=[[x for i,x in enumerate(text.split()) if (i+j)%colNumber==0 ] 
for j in range(colNumber)]

print(table)

结果:

[['a', '1', '1', '1'], ['c', '4', '4', '4'], ['b', '2', '2', '2']]

答案 3 :(得分:0)

您可以使用pandas数据帧。 (希望这是一个制表符分隔文件)

import pandas as pd
import numpy as np
import csv


df = pd.read_csv('text.txt', sep='\t', header=None)
print df

然后您可以重命名列。