내가 나중에 함께 다시 합류 한 후, 길이에 따라 별도의 파일로 분할 가고 싶어
- 뭔가를 같이 :
from tempfile import TemporaryFile
from itertools import chain
파일의 길이 -> 출력 파일의 참조 딕셔너리를 유지합니다. 파일이 이미 열린 곳에서 파일에 쓰거나 새 임시 파일을 만듭니다. 스티븐 Rumbalski가 지적했듯이
은
output = {}
with open('input') as fin:
for line in fin:
length = len(line.split())
output.setdefault(length, TemporaryFile()).write(line)
,이 또한 defaultdict
으로 수행 할 수 있습니다
from collections import defaultdict
output = defaultdict(TemporaryFile)
...
output[length].write(line)
임시 파일은 모든 파일의 끝을 가리키는 것입니다. 그들을 통해 읽을 때 우리가 다시 데이터를 얻을 수 있도록
for fh in output.values():
fh.seek(0)
길이의 증가하는 순서로 각 파일에서 행을 가지고 ... 처음으로 재설정 ... 그리고 최종 출력 파일에 모든 물품.
with open('output', 'w') as fout:
fout.writelines(chain.from_iterable(v for k,v in sorted(output.iteritems())))
파이썬은 ... 프로그램 종료시 임시 파일을 정리해야합니다
나는 인덱스를 구축하고이를 정렬 할 것입니다. 예를 들어 화학 경로 파일의 각 행에 대해'(length, pointer_to_line)'의 인덱스에 튜플을 만듭니다. 'len (row.split())'만 할 수 있기 때문에 길이가 쉽습니다. 행의 포인터는'f.tell()'등으로 행해질 수가 있습니다. 색인을 정렬하십시오. 일단 정렬되면 화학 경로 파일의 라인을 순서대로 잡아서 새 파일에 쓸 수 있습니다. 편집 : [이 게시물] (http://stackoverflow.com/questions/7079473/sorting-large-text-data) 도움이 될 수 있습니다. – wflynny
첫 번째 반응은 강제로 CSV로 작업하지 않고이 데이터를 데이터베이스에 저장하는 것입니다 (이미 데이터베이스에서 데이터를 읽었을 수도 있습니다). 필요한 경우 데이터베이스의 이점을 누리고 Python + SQL을 사용하여 향후 더 많은 유형의 데이터 분석을 수행 할 수 있습니다. – mdscruggs