将TXT文件传输到Python中的表

问题描述 投票:0回答:1

我有一个包含 245K 字符的文本文件,代表以下格式的股票数据:

{'SYMBOL_CODE': 'EGS923F1C016', 'Reuters': 'IEEC_r2.CA', 'HIGH_PRICE': 0.053, 'LOW_PRICE': 0.046, 'OPEN_PRICE': 0.054, 'CLOSE_PRICE': 0.051, 'LAST_TRADE_PRICE': 0.051, 'LAST_TRADE_VOLUME': 2050.0, 'TOTAL_TRADES': 499.0, 'TOTAL_VOLUME': 47991055.0, 'TOTAL_VALUE': 2366091.367000001, 'BID_PRICE': 0.051, 'BID_VOLUME': 27000.0, 'ASK_PRICE': 0.053, 'ASK_VOLUME': 215870.0, 'TOTAL_BIDS': 47039048.0, 'TOTAL_ASKS': 59442952.0, 'LAST_CHANGE': -0.003, 'LAST_CHANGE_PRC': -5.56, 'AVG_CHANGE': -0.003, 'AVG_CHANGE_PRC': -5.56, 'PREVIOUS_CLOSE': 0.054, 'HIGH_PRICE_LIMIT': 0.052, 'LOW_PRICE_LIMIT': 0.056, 'LOW_52_WEEk': 0.04, 'HIGH_52_WEEK': 0.121, 'TOTAL_BUY': 979337.838, 'TOTAL_SELL': 1386753.529, 'AVG_5Day': 41555071.0, 'AVG_30Day': 39937787.0, 'AVG_90Day': 39614361.0, 'LISTED_SHARES': 972000000, 'CURRENCY': 1, 'EPS': 0.0, 'PE_RATIO': 0.0, 'DIVIDEND_YIELD_PERC': 0.0, 'SYMBOL_STATE': 'A', 'SYMBOLS_REC_SERIAL': 627424338, 'TRADE_REC_SERIAL': 627424338}

每只股票的详细信息如上用 {} 括起来,总共 314 只股票。

所以我想使用python将这个txt文件转换成表格,如下所示。

| SYMBOL_CODE | Reuters   |
| ----------- | --------- |
| EGS923F1C016| IEEC_r2.CA|

其余细节应遵循相同的结构。

python pandas dataframe tabular
1个回答
0
投票

显示的数据看起来像 Python 字典的字符串表示形式。注意:它是不是JSON

您可以使用 ast.literal_eval 解释这些数据

为了构建格式良好的输出,您需要知道所有列的最大宽度。

你可以这样做:

from ast import literal_eval
from itertools import repeat

FILE = "foo.txt"

def do_print(lst, width):
    print("|" + "|".join(f"{k:^{width+2}}" for k in lst) + "|")

with open(FILE) as f:
    if dicts := [literal_eval(r) for r in f]:
        width = 0
        for d in dicts:
            for k, v in d.items():
                width = max(width, len(k), len(str(v)))
        for m in dicts[0].keys(), repeat("-" * width, len(dicts[0])):
            do_print(m, width)
        for d in dicts:
            do_print(d.values(), width)

输出:

|     SYMBOL_CODE     |       Reuters       |     HIGH_PRICE      |      LOW_PRICE      |     OPEN_PRICE      |     CLOSE_PRICE     |  LAST_TRADE_PRICE   |  LAST_TRADE_VOLUME  |    TOTAL_TRADES     |    TOTAL_VOLUME     |     TOTAL_VALUE     |      BID_PRICE      |     BID_VOLUME      |      ASK_PRICE      |     ASK_VOLUME      |     TOTAL_BIDS      |     TOTAL_ASKS      |     LAST_CHANGE     |   LAST_CHANGE_PRC   |     AVG_CHANGE      |   AVG_CHANGE_PRC    |   PREVIOUS_CLOSE    |  HIGH_PRICE_LIMIT   |   LOW_PRICE_LIMIT   |     LOW_52_WEEk     |    HIGH_52_WEEK     |      TOTAL_BUY      |     TOTAL_SELL      |      AVG_5Day       |      AVG_30Day      |      AVG_90Day      |    LISTED_SHARES    |      CURRENCY       |         EPS         |      PE_RATIO       | DIVIDEND_YIELD_PERC |    SYMBOL_STATE     | SYMBOLS_REC_SERIAL  |  TRADE_REC_SERIAL   |
| ------------------- | ------------------- | ------------------- | ------------------- | ------------------- | ------------------- | ------------------- | ------------------- | ------------------- | ------------------- | ------------------- | ------------------- | ------------------- | ------------------- | ------------------- | ------------------- | ------------------- | ------------------- | ------------------- | ------------------- | ------------------- | ------------------- | ------------------- | ------------------- | ------------------- | ------------------- | ------------------- | ------------------- | ------------------- | ------------------- | ------------------- | ------------------- | ------------------- | ------------------- | ------------------- | ------------------- | ------------------- | ------------------- | ------------------- |
|    EGS923F1C016     |     IEEC_r2.CA      |        0.053        |        0.046        |        0.054        |        0.051        |        0.051        |       2050.0        |        499.0        |     47991055.0      |  2366091.367000001  |        0.051        |       27000.0       |        0.053        |      215870.0       |     47039048.0      |     59442952.0      |       -0.003        |        -5.56        |       -0.003        |        -5.56        |        0.054        |        0.052        |        0.056        |        0.04         |        0.121        |     979337.838      |     1386753.529     |     41555071.0      |     39937787.0      |     39614361.0      |      972000000      |          1          |         0.0         |         0.0         |         0.0         |          A          |      627424338      |      627424338      |
© www.soinside.com 2019 - 2024. All rights reserved.