2014-12-20 1 views
1

많은 변수가 들어있는 텍스트 파일에 열 구분 데이터가 있습니다. 원래 파일은 Fortran에서 작성되었습니다. 각 행의 값 수는 고정되어 있습니다 (예 : 8). 예를 들어 "-0.213897E-05"값은 같은 행에 다른 7 개의 값이 있습니다. 빈 칸은 "+ ve 기호"를 의미합니다. 이러한 행은 8 개이지만 값의 총 수는 62와 64 사이가 될 수 있습니다. 그런 다음 약 1000 개의 변수가 있습니다.파이썬에서 열로 구분 된 텍스트 데이터를 빠르게 읽음

파일에서 한 변수의 예는 다음과 같습니다.

 -0.213897E-05 0.106493E-06-0.530198E-08 0.263970E-09-0.131423E-10 0.654316E-12-0.325765E-13 0.162189E-14 
    -0.427794E-05 0.212986E-06-0.106040E-07 0.527940E-09-0.262846E-10 0.130863E-11-0.651530E-13 0.324377E-14 
    -0.641691E-05 0.319479E-06-0.159059E-07 0.791910E-09-0.394269E-10 0.196295E-11-0.977294E-13 0.486566E-14 
    -0.855588E-05 0.425972E-06-0.212079E-07 0.105588E-08-0.525692E-10 0.261726E-11-0.130306E-12 0.648755E-14 
    -0.106949E-04 0.532465E-06-0.265099E-07 0.131985E-08-0.657114E-10 0.327158E-11-0.162882E-12 0.810944E-14 
    -0.128338E-04 0.638958E-06-0.318119E-07 0.158382E-08-0.788537E-10 0.392590E-11-0.195459E-12 0.973132E-14 
    -0.149728E-04 0.745452E-06-0.371138E-07 0.184779E-08-0.919960E-10 0.458021E-11-0.228035E-12 0.113532E-13 
    -0.171118E-04 0.851945E-06-0.424158E-07 0.211176E-08-0.105138E-09 

readlines()를 사용하여 파일을 성공적으로 읽은 다음 문자열을 실수로 변환했지만 결과가 느리고 시간이 오래 걸립니다. 나는 또한 느린 FortranFormat을 시도했다. 파일의 전체 크기는 약 2GB입니다.

이 값을 읽을 수있는 방법을 제안하십시오. 파일에 약 1000 개의 변수가 있습니다.

+0

이 당신을 위해 정규식을 사용하는 것입니다 물건의 종류이다. –

+2

@EdwardL. 나는 데이터 구조가 알려져 있기 때문에 정규 표현식이 가장 뛰어난 접근법이 될지 의심 스럽다. – jonrsharpe

+0

@EdwardL. U는 문자열로 값을 읽어야하고 문자열에 정규 표현식을 사용한다는 의미인가요? 내가하는 것처럼 readlines를 사용하는 것만 큼 느리지는 않습니까? 기본적으로 문자열이 아닌 수레로 읽으 려합니다. –

답변

3

팬더가 여기에서 도울 수 있습니다. a section about reading fixed width files in the docs이 있으며 텍스트를 StringIO로 읽습니다 (파일은 똑같이 작동 함).

In [21]: colspecs = [(5 + 13 * i, 5 + 13 * (i + 1)) for i in range(8)] 

In [22]: pd.read_fwf(StringIO(s), colspecs=colspecs, header=None) 
Out[22]: 
      0   1    2    3    4    5    6    7 
0 -0.000002 0.000000 -5.301980e-09 2.639700e-10 -1.314230e-11 6.543160e-13 -3.257650e-14 1.621890e-15 
1 -0.000004 0.000000 -1.060400e-08 5.279400e-10 -2.628460e-11 1.308630e-12 -6.515300e-14 3.243770e-15 
2 -0.000006 0.000000 -1.590590e-08 7.919100e-10 -3.942690e-11 1.962950e-12 -9.772940e-14 4.865660e-15 
3 -0.000009 0.000000 -2.120790e-08 1.055880e-09 -5.256920e-11 2.617260e-12 -1.303060e-13 6.487550e-15 
4 -0.000011 0.000001 -2.650990e-08 1.319850e-09 -6.571140e-11 3.271580e-12 -1.628820e-13 8.109440e-15 
5 -0.000013 0.000001 -3.181190e-08 1.583820e-09 -7.885370e-11 3.925900e-12 -1.954590e-13 9.731320e-15 
6 -0.000015 0.000001 -3.711380e-08 1.847790e-09 -9.199600e-11 4.580210e-12 -2.280350e-13 1.135320e-14 
7 -0.000017 0.000001 -4.241580e-08 2.111760e-09 -1.051380e-10   NaN   NaN   NaN 

는 수레로 읽을 수있다.


원래 답 : read_csv 여기에 당신을 도울 수, 그것은 구분 된 텍스트 파일에 대한 좋아요 :

pd.read_csv('your_file.txt', sep=' ') 
+1

OP의 예에는 구분 기호가 없으며 고정 폭입니다. – jonrsharpe

+0

@jonrsharpe 그것은 공백으로 구분됩니까? –

+0

아니요, 공백은 양수 값에만 사용됩니다. 음수 값은 계속 똑바로 계속됩니다. – jonrsharpe

관련 문제