ASCII 파일에 저장된 배열 데이터로 작업하고 있습니다 (this thread과 유사). 내 파일은 적어도 2M 줄 (158MB)이며 다른 스키마가있는 여러 섹션으로 나뉩니다. 형식을 읽는 모듈에서 lines = open('myfile.txt', 'r').readlines()
을 통해 전체 파일을 읽으므로 각 섹션의 위치를 인덱싱하고 NumPy 데이터 구조에 필요한 각 섹션을 읽을 수 있습니다.NumPy : 문자열 목록에서 이질적인 데이터 열로드
예를 들어, 섹션 중 하나 발췌입니다
>>> print lines[20:25]
[' 1 0.00000E+00\n',
' 2 0.43927E-07\n',
' 3 0.44006E-07\n',
' 4 0.44020E-07\n',
' 5 0.44039E-07\n']
어떻게 신속 I 할 수 있습니다 것 스키마 [int, float, float, float, float, float, float, float, float]
하고, 나중에 부분이
>>> print lines[5:10]
[' 1 0.1000 0.300E-03 0.000E+00 0.300E-03 0.000E+00 0.000E+00 0.300E-03 0.100E-03\n',
' 2 0.1000 0.120E-02 0.000E+00 0.120E-02 0.000E+00 0.000E+00 0.120E-02 0.100E-03\n',
' 3 0.1000 0.100E-02 0.000E+00 0.100E-02 0.000E+00 0.000E+00 0.100E-02 0.100E-03\n',
' 4 0.1000 0.110E-02 0.000E+00 0.110E-02 0.000E+00 0.000E+00 0.110E-02 0.100E-03\n',
' 5 0.1000 0.700E-03 0.000E+00 0.700E-03 0.000E+00 0.000E+00 0.700E-03 0.100E-03\n']
간단한 [int, float]
스키마이 NumPy로 라인의 다른 섹션에로드? np.loadtxt
이 있지만 파일 핸들이 필요하며 끝까지 읽습니다. 나는 또한 np.from*
기능을 볼 수 있지만, 이미 내 이미 lines
와 함께 그들을 사용하는 방법을 잘 모르겠습니다. 파일을 두 번 읽어야합니까?
이기종 데이터 유형에 관해서는 np.dtype([('col1', '<i2'), ('col2', 'f4'), ('col3', 'f4'), ('col4', 'f4'), ('col5', 'f4'), ('col6', 'f4'), ('col7', 'f4'), ('col8', 'f4'), ('col9', 'f4')])
과 같이 dtype
의 화합물을 사용할 수 있습니다. 맞습니까?
를 수행
또는 더 쉽게 할 수 있습니다. 그래서 대신에'readIO' 파일 입력을'StringIO' 버퍼에 보내서'np.loadtxt'로 넘깁니다 (관련 섹션을 찾기 위해 readline을 통해 입력을 사전 처리해야합니다). 모든 위대한 팁, 감사합니다! –
참고 : 'np.fromiter' 예제는 알 수없는 이유로 예상대로 작동하지 않습니다. –