2014-07-10 2 views
0

죄송합니다. 주제가 이미 접근 되었다면 찾지 못했습니다. 로컬 드라이브에 있지 않은 대용량 csv 파일 (> 300MB)을 Python으로 읽으려고합니다.Python의 비 로컬 디스크에서 큰 파일 읽기

저는 프로그래밍 전문가는 아니지만 로컬 드라이브에 복사하면 처음에는 읽는 데 시간이 오래 걸릴 것이라고 생각합니다.

두 가지 방법을 모두 테스트했지만 계산 시간은 비슷합니다. 내가 빠진 것이 있습니까? 누군가가 설명/가능한 빨리 그 파일을 읽을 수있는 좋은 방법을 줄 수 있습니까? 파일을 복사, 크리스토프 당신의 도움을 MyFile에

+2

무엇이 가장 먼저 복사하는 것이 읽기보다 시간이 덜 걸릴 것이라고 생각하십니까? 복사 작업을 어떻게 생각하십니까? – luk32

+0

csvs를 읽는 경우 [CSV] (https://docs.python.org/3.3/library/csv.html) 모듈을 확인하십시오. – Shadow9043

+0

@Barrec 비 로컬 드라이브에서 읽기 및 처리가 로컬 드라이브가 아닌 읽기, 로컬 드라이브 쓰기, 로컬 드라이브 읽기 및 처리보다 빠르지 않습니다. 그것은 분명히 더 많은 일입니다. 전체 런타임에 차이가 없다면 처리 시간이 데이터의 읽기 시간을 지배하고 더 빨리 읽는 것이 많은 영향을 미치지 않는다는 것을 의미합니다. – BlackJack

답변

0

고마워 각 라인 : 파일을 읽기 위해 shutil.copy2

: 내가 사용하고 로컬 드라이브에 복사

그것을 순차적으로 읽고 다른 곳에서 저축하고 있습니다.

응용 프로그램의 성능은 데이터 액세스 패턴, I/O 시간 계산, 네트워크 대기 시간 및 네트워크 대역폭에 따라 달라질 수 있습니다.

스크립트를 한 번 실행하고 순차적으로 읽으면 파일을 복사하는 것과 같습니다. 단, 저장하는 대신 계산을 수행한다는 점만 다릅니다. 작은 덩어리의 데이터를 처리하더라도 아마 버퍼링됩니다. 사실 단일 실행의 경우, 1면을 복사하면 실제로 동일한 데이터를 두 번 읽습니다. 한 번은 사본 용으로, 한 번은 계산 용 사본입니다.

스크립트를 여러 번 실행하면 데이터 처리량을 확인해야합니다. 예를 들어 기가비트 이더넷을 사용하는 경우 1GBit/s는 125MByte/s입니다. 데이터를 더 느리게 처리하면 대역폭이 제한되지 않습니다.

네트워크 대기 시간은 작은 청크에 대해 여러 요청을 보낼 때 발생합니다. 읽기 요청시 네트워크 요청을 보내고 유한 시간에 데이터를 다시 가져옵니다. 이것은 대기 시간입니다. 한 번 큰 대기열에 대한 요청을하면 대기 시간 제한을 한 번 지불합니다. 큰 청크의 1/1000에 대해 1000 번 요청하면 1000 번 "지불"해야합니다. 그러나 이것은 아마도 네트워크 파일 시스템에 의해 사용자로부터 추상화 될 것이고 순차적 읽기의 경우에는 버퍼링 될 것입니다. 그것은 파일을 뛰어 넘고 그것의 작은 덩어리를 읽는 랜든에서 분명히 나타납니다.

초당 처리하는 바이트 수를 확인하고 하드웨어 한계와 비교하여 제한되는 항목을 확인할 수 있습니다. HDD 속도에 가깝다면 (당신의 경우에는 그렇지 않습니다) I/O-HDD에 묶여 있습니다. 네트워크 대역폭에 가깝고 낮 으면 I/O 네트워크에 의해 제한됩니다. 그것이 더 낮 으면 데이터 처리 속도 나 I/O 네트워크 대기 시간에 구속을받습니다. 그러나 I/O로 바인딩 된 경우 두 가지 방법의 차이가 나타납니다. 따라서 동일한 결과가 표시되면 계산됩니다.

+0

세부 설명 해주셔서 감사합니다 Luk! – Barrec