당신에게 문맥을주기 위해서 :여러 개의 Python 절편 데이터를 한 번에 읽고 버퍼링하고 줄 바꿈?
나는 큰 파일 f
을 몇 기가 크기로 가지고있다. 내가이 파일을 읽을 때 버퍼링을 활용하려는
for obj in objs: cPickle.dump(obj, f)
를 실행하여 생성 된 다른 객체의 연속 피클이 포함되어 있습니다. 내가 원한 것은 여러 개의 픽업 된 오브젝트를 한 번에 버퍼로 읽는 것입니다. 이 일을하는 가장 좋은 방법은 무엇입니까? 피킹 된 데이터에 대해서는 의 아날로그가 필요합니다. 실제로 선택된 데이터가 실제로 개행 문자로 분리 된 경우 readline을 사용할 수 있지만 사실인지 확실하지 않습니다.
내가 염두에두고있는 또 다른 옵션은 절편 객체를 먼저 문자열로 채운 다음 파일에 문자열을 쓰는 것입니다. 각각은 개행 문자로 구분됩니다. 파일을 다시 읽으려면 readlines()
과 loads()
을 사용할 수 있습니다. 하지만 절인 된 물체가 "\n"
문자를 가질 수 있으며이 파일 읽기 체계를 버릴까 봐 걱정됩니다. 내 두려움은 근거가 없습니까?
하나의 옵션은 객체의 거대한 목록으로 피클 링하는 것이지만, 그럴 수있는 것보다 많은 메모리가 필요합니다. 멀티 스레딩으로 속도를 높일 수는 있지만 버퍼링이 제대로 작동하기 전에 거기에 가고 싶지 않습니다. 이와 같은 상황에 대한 "우수 사례"는 무엇입니까?
EDIT : 또한 원시 바이트를 버퍼로 읽어 들여로드를 호출 할 수 있지만, 버퍼를 얼마나 많이 사용했는지 알 필요가 있으므로 헤드를 버릴 수 있습니다.
이미 장면 뒤에서 버퍼링이 발생해야합니다. 또한 스레드가 도움이되지 않습니다. –
pickle 파일의 생성을 제어 할 수 있다면,'pickle.dump (obj, f, pickle.HIGHEST_PROTOCOL)'(또는 이와 동등한'pickle.dump (obj, f, -1)')로, 바이너리 프로토콜이며 디폴트 ASCII보다 훨씬 더 작습니다. 파일 크기가 훨씬 작 으면 버퍼링에 대한 우려를 줄일 수 있습니다. 실제로 "@Kirk Strauser의 [answer] (http://stackoverflow.com/a/5507750/355230)에서". \ n "'"트릭으로 끝나는 라인을 찾는 것이 효과가 없을 것입니다. – martineau