약 1B 행의 큰 csv 파일을 읽었습니다. 날짜를 파싱 할 때 문제가 발생했습니다. 파이썬은 처리 속도가 느립니다.대용량 파일의 구문 분석 속도를 향상시키는 방법이 있습니까?
파일의 한 줄은 '20170427,20:52:01.510,ABC,USD/MXN,1,OFFER,19.04274,9000000,[email protected]@8653948257753368229,0.0\n'
난 단지 데이터를 보면 , 그것은 1 분 소요, 다음과 같습니다.
t0 = datetime.datetime.now()
i = 0
with open(r"QuoteData.txt") as file:
for line in file:
i+=1
print(i)
t1 = datetime.datetime.now() - t0
print(t1)
129908976
0:01:09.871744
그러나 datetime을 구문 분석하려고하면 8 분이 걸릴 것입니다.
t0 = datetime.datetime.now()
i = 0
with open(r"D:\FxQuotes\ticks.log.20170427.txt") as file:
for line in file:
strings = line.split(",")
datetime.datetime(
int(strings[0][0:4]), # %Y
int(strings[0][4:6]), # %m
int(strings[0][6:8]), # %d
int(strings[1][0:2]), # %H
int(strings[1][3:5]), # %M
int(strings[1][6:8]), # %s
int(strings[1][9:]), # %f
)
i+=1
print(i)
t1 = datetime.datetime.now() - t0
print(t1)
129908976
0:08:13.687000
split()
약 1 분이 소요되고 날짜 파싱 약 6 분이 걸린다. 이 문제를 개선하기 위해 할 수있는 일이 있습니까?
[gevent] (http://www.gevent.org/)를 살펴볼 수 있습니다. 여러 스레드 사이에서 프로세스를 분할 할 수 있습니다 - 실제로 원하는만큼 많은 CPU/mem 대문자를 조심하십시오. – Neil
날짜를 실제 datetime 객체로 변환해야합니까? – Grimmy
''''line [: s.index (',')]''날짜를 더 빨리 얻으려면? 또는 각 행의 형식이 동일하면 하드 코딩 된 인덱스로 슬라이스하십시오. ''line [0 : 8]''. – Grimmy