1

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

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

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

4

4 回答 4

4

如果您有一个行列表并且只想将其更改为列列表,您可以简单地执行

transposed_list = zip(*original_list_of_rows)

但不清楚您是否有行列表

于 2013-11-07T01:11:34.407 回答
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)
于 2013-11-07T01:12:00.407 回答
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']]
于 2013-11-07T01:13:14.167 回答
0

您可以使用熊猫数据框。(希望这是一个制表符分隔的文件)

import pandas as pd
import numpy as np
import csv


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

然后,您可以重命名列。

于 2013-11-07T04:00:48.540 回答