Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python으로 특정 크기의 파일 만들기: seek()와 write() 활용 방법

Python에서 특정 크기의 파일 생성하기

파이썬에서 원하는 크기의 파일을 만들려면 seek() 메서드로 해당 바이트 위치까지 커서를 이동시킨 뒤, 그 지점에 단 1바이트만 쓰면 됩니다. 파일 시스템은 자동으로 파일 크기를 지정된 위치까지 확장해 줍니다.

예제 1: 희소 파일(Sparse File) 생성

with open('my_file', 'wb') as f:
    f.seek(1024 * 1024 * 1024)  # 1GB 위치로 이동
    f.write(b'0')

위 코드는 희소 파일(sparse file)을 생성합니다. 희소 파일은 실제 데이터가 존재하지 않는 중간 영역을 디스크에 저장하지 않기 때문에, 파일 크기는 1GB로 표시되지만 실제 디스크 사용량은 극히 일부에 불과합니다. 대용량 테스트 파일을 빠르게 만들 때 유용하지만, 실제 저장 공간을 확보하는 것은 아니라는 점에 유의해야 합니다.

예제 2: 실제 디스크 공간을 차지하는 파일 생성

희소 파일이 아닌, 실제 용량을 모두 차지하는 파일을 만들려면 전체 크기만큼 데이터를 직접 기록해야 합니다.

with open('my_file', 'wb') as f:
    num_bytes = 1024 * 1024 * 1024  # 1GB
    f.write(b'0' * num_bytes)

대용량 파일은 청크 단위로 작성하기

파일이 매우 클 경우 b'0' * num_bytes처럼 한 번에 문자열을 생성하면 그만큼의 메모리를 소비하게 됩니다. 다음과 같이 청크(chunk) 단위로 나누어 쓰면 메모리 사용량을 최소화할 수 있습니다.

CHUNK_SIZE = 1024 * 1024      # 1MB씩 기록
target_size = 1024 * 1024 * 1024  # 목표 크기: 1GB

with open('my_file', 'wb') as f:
    written = 0
    while written < target_size:
        chunk = min(CHUNK_SIZE, target_size - written)
        f.write(b'\0' * chunk)
        written += chunk

참고: truncate() 활용하기

희소 파일을 만드는 더 간결한 방법으로 truncate()를 사용할 수도 있습니다.

with open('my_file', 'wb') as f:
    f.truncate(1024 * 1024 * 1024)  # 1GB 크기로 설정

상황에 따라 적절한 방법을 선택하세요. 빠른 테스트용 파일이라면 seek() 또는 truncate(), 실제 디스크 공간이 필요하다면 청크 단위 쓰기 방식이 가장 안전하고 효율적입니다.