如何读取空格分隔值不恒定的文件

时间:2018-03-26 02:22:38

标签: python pandas

TIME      M1       M2   K1 K2        SEP    ECC  R1/ROL1 R2/ROL2  TYPE
 0.0000   30.000   15.000  1  1   6.9488e+05  0.00   0.000   0.000  INITIAL 
 0.0000   30.000   15.000  1  1   6.9488e+05  0.00   0.000   0.000  PreMS aperi=694884 t1=0 f1=0 R1=7.74028 R1/RLperi1=2.53155e-05 R1/a(1-e)=1.11389e-05 t2=0 f2=0 R2=5.02787 R2/RLperi2=2.25555e-05 R2/a(1-e)=7.23555e-06 R1+2/aperi=1.83745e-05
 5.9523   27.735   14.912  2  1   7.3335e+05  0.00   0.000   0.000  TYPE_CHNGE
 5.9611   27.663   14.912  4  1   7.3459e+05  0.00   0.004   0.000  TYPE_CHNGE
 6.3588   14.790   14.903  4  1   1.0562e+06  0.00   0.004   0.000  q-inv
 6.4755   10.469   14.901  7  1   1.2381e+06  0.00   0.000   0.000  TYPE_CHNGE
 6.6301    9.158   14.897  8  1   1.3065e+06  0.00   0.000   0.000  TYPE_CHNGE
 6.6595    8.857   14.897 14  1            0 -1.00   0.000   0.000  TYPE_CHNGE
 6.6595    8.857   14.897 14  1            0 -1.00   0.000   0.000  DISRUPT 
 6.6595    8.857   14.897 14  1            0 -1.00   0.000   0.000  SN
 6.6595    8.857   14.897 14  1            0 -1.00   0.000   0.000  kick vk=392.824 vr=1.84982 theta=6.21052 phi=-0.146541 -> vn=390.999

 6.6595    8.857   14.897 14  1            0 -1.00   0.000   0.000  BEG_SYMB
12.7530    8.857   14.654 14  2            0 -1.00   0.000   0.000  OFF_MS
12.7530    8.857   14.654 14  2            0 -1.00   0.000   0.000  TYPE_CHNGE
12.7795    8.857   14.648 14  4            0 -1.00   0.000   0.000  TYPE_CHNGE
14.2105    8.857   10.438 14  5            0 -1.00   0.000   0.000  TYPE_CHNGE
14.2653    8.857    1.912 14 14            0 -1.00   0.000   0.000  TYPE_CHNGE
14.2653    8.857    1.912 14 14            0 -1.00   0.000   0.000  BEG_SYMB
14.2653    8.857    1.912 14 14            0 -1.00   0.000   0.000  q-inv
14.2653    8.857    1.912 14 14            0 -1.00   0.000   0.000  SN
20000.0000    8.857    1.912 14 14            0 -1.00   0.000   0.000  MAX_TIME

概率:1

这是文件。正如您所看到的那样,第3行和第12行的变量非常长,并且也用空格分隔,但它们是同一“TYPE”的一部分。 我试过了:

import pandas as pd
pd.read_csv('c_log2.dat', delimiter='delim_whitespace=True').

但它抱怨道:

  

ParserError:标记数据时出错。 C错误:第12行预计41个字段,见43

如何读取具有由空格分隔的长值但是同一变量的一部分的文件? 非常感谢帮助。

1 个答案:

答案 0 :(得分:2)

预处理到临时文件,然后用pandas读取该文件。

Name

输出:

from io import StringIO
import pandas as pd
import re

for_pd = StringIO()
with open('ale.csv') as ale:
    for line in ale:
        line = re.subn(r'\s+', ',', line.strip(), 9)
        print (line[0], file=for_pd)
for_pd.seek(0)

df = pd.read_csv(for_pd)
print (df.head())