English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
파일은 디스크에 저장된 관련 정보의 이름 지정된 위치입니다. 이는 데이터를 영구적으로 비가용성 저장장치(예: 하드 드라이브)에 저장하는 데 사용됩니다.
랜덤 액세스 메모리(RAM)는 임시이며, 컴퓨터가 껐을 때 데이터가 손실됩니다. 따라서 데이터를 미래의 사용을 위해 파일을 사용합니다.
파일을 읽거나 쓰기할 때, 먼저 파일을 엽니다. 작업이 완료되면, 파일을 닫아서 파일에 바인딩된 자원을 해제해야 합니다.
따라서 파이썬에서 파일操作은 다음과 같은 순서로 수행됩니다.
파일을 엽니다
읽거나 쓰기(작업 수행)
파일을 닫습니다
파이썬은 파일을 엽니다. 이 함수는 파일 객체를 반환하며, 이는 파일을 적절히 읽거나 수정하기 위해 사용되는 핸들로도 불립니다.
>>> f = open("test.txt") # 현재 디렉토리의 파일을 엽니다 >>> f = open("C:/파이썬33/README.txt") # 전체 경로를 지정
파일을 엽니다. 모드에서는 'r'를 읽기, 'w'를 쓰기, 'a'를 추가하는지를 지정합니다. 또한 텍스트 모드나 이진 모드로 파일을 엽니다.
기본 설정은 텍스트 모드로 읽기입니다. 이 모드에서는 파일에서 읽을 때 문자열을 얻습니다.
그런 다른 한편, 이진 모드는 바이트를 반환하며, 이는 이미지나 exe 파일과 같은 비텍스트 파일을 처리할 때 사용하는 모드입니다.
모드 | 설명 |
---|---|
'r' | 읽기를 위해 파일을 엽니다。(기본) |
'w' | 쓰기를 위해 파일을 엽니다. 없으면 새 파일을 생성하거나, 존재하면 截断합니다. |
'x' | 단독 생성을 위해 파일을 엽니다. 파일이 이미 존재하면 작업이 실패합니다. |
'a' | 끝에 추가하며 截断하지 않고 엽니다. 없으면 새 파일을 생성합니다. |
't' | 텍스트 모드로 엽니다。(기본) |
'b' | 이진 모드로 엽니다。 |
'+' | 업데이트를 위해 파일을 엽니다(읽기와 쓰기) |
f = open("test.txt") # ' r' 또는 ' rt'에 등价 f = open("test.txt",'w') # 텍스트 모드로 쓰기 f = open("img.bmp",'r+b') # 이진 모드로 읽고 쓰기
다른 언어와 달리, 문자 'a'는 ASCII(또는 상응 인코딩)로 인코딩 전에는 숫자를 가리키지 않습니다.97 。
또한, 기본 encoding은 플랫폼에 따라 다릅니다. Windows에서는 'cp'1252하지만 'utf-8Linux에서.
따라서, 기본编码에 의존해서는 안 됩니다. 다른 플랫폼에서 코드의 동작이 다를 수 있습니다.
따라서, 텍스트 모드로 파일을 처리할 때는编码 유형을 명시적으로 지정하는 것이 좋습니다.
f = open("test.txt",mode='r',encoding='utf-8)
파일 작업을 완료한 후, 파일을 올바르게 닫아야 합니다.
파일을 닫으면 파일과 바인딩된 자원이 해제되며, close() 메서드를 통해 완료됩니다.
파이썬에는 쓰레기 수집기가 있어서 불필요한 객체를 정리합니다. 그러나, 파일을 닫는 데는 절대로 의존해서는 안 됩니다.
f = open("test.txt",encoding='utf-8) # 파일 작업 실행 f.close()
이 방법은 완전히 안전하지 않습니다. 파일에 대한 일부 작업을 수행 중에 예외가 발생하면 코드가 파일을 닫지 않고 종료됩니다.
안전한 방법은 다음과 같습니다.try ... finally블록.
try: f = open("test.txt",encoding='utf-8) # 파일 작업 실행 finally: f.close()
그래서, 예외가 발생하더라도 파일이 올바르게 닫히고 프로그램 흐름이 중단되도록 보장할 수 있습니다.
최선의 방법은 with 문을 사용하는 것입니다. 이렇게 하면 with 문의 내부 블록에서 빠져나갈 때 파일을 닫을 수 있습니다.
우리는 close() 메서드를 명시적으로 호출할 필요가 없습니다. 내부적으로 완료됩니다.
with open("test.txt",encoding='utf-8) as f: # 파일 작업 실행
파이썬으로 파일을 쓰기 위해 'w' 모드로 쓰거나, 'a' 모드로 추가하거나, 'x' 모드로 독점적으로 생성할 수 있습니다.
이 'w' 모드를 신중하게 사용해야 합니다. 이는 파일이 존재하면 덮어쓰기합니다(이미 존재하면). 이전 모든 데이터는 지워집니다.
문자열이나 바이트 시퀀스(이진 파일용)를 write() 메서드를 통해 입력됩니다. 이 메서드는 파일에 입력된 문자 수를 반환합니다.
with open("test.txt",'w',encoding='utf-8) as f: f.write("my first file\n") f.write("This file\n\n") f.write("contains three lines\n")
만약 'test.txt' 파일이 존재하지 않으면, 새로운 파일로 생성됩니다. 존재하면 덮어쓰게 됩니다.
다른 줄을 구분하기 위해 반드시 개행 문자를 포함해야 합니다.
파이썬으로 파일을 읽기 위해서는 파일을 읽기 모드로 열어야 합니다.
다양한 방법이 사용될 수 있습니다. read(size) 메서드를 사용할 수 있습니다.사이즈지정되지 않으면사이즈파라미터를 사용하여 파일을 읽고 파일 끝까지 반환합니다.
>>> f = open("test.txt",'r',encoding='utf-8) >>> f.read(4) # 이전4데이터 'This' >>> f.read(4) # 다음4데이터 '은' >>> f.read() # 나머지 부분을 파일 끝까지 읽습니다 '제 첫 번째 파일\n이 파일\n세 줄을 포함하고 있습니다\n' >>> f.read() # 추가로 읽기로 빈 문자열을 반환
read() 메서드는 개행 문자를 '\n'으로 반환합니다. 파일 끝에 도달하면 추가로 읽을 때 빈 문자열을 얻습니다.
seek() 메서드를 사용하여 현재 파일 커서(위치)를 변경할 수 있습니다. 또한, tell() 메서드는 현재 위치(바이트 단위)를 반환합니다.
>>> f.tell() # 현재 파일 위치를 얻습니다 56 >>> f.seek(0) # 파일 커서를 초기 위치로 이동합니다 0 >>> print(f.read()) # 전체 파일을 읽습니다 이것은 제 첫 번째 파일 이 파일 세 줄을 포함하고 있습니다
사용할 수 있습니다for 루프행별로 파일을 읽습니다. 이는 효율적이고 빠릅니다.
>>> for line in f: ... print(line, end='') ... 이것은 제 첫 번째 파일 이 파일 세 줄을 포함하고 있습니다
파일 자체의 행은 개행 문자'\n'을 가집니다.
또한, print()의 끝 파라미터는 출력 시 두 줄 개행을 피합니다.
또는, readline() 메서드를 사용하여 파일의 각 행을 읽을 수 있습니다. 이 메서드는 파일을 읽으며 개행 문자까지, 개행 문자를 포함하여 읽습니다.
>>> f.readline() '이것은 제 첫 번째 파일\n' >>> f.readline() '이 파일\n' >>> f.readline() '세 줄을 포함하고 있습니다\n' >>> f.readline()
마지막으로, readlines() 메서드는 파일의 나머지 행의 목록을 반환합니다. 파일 끝(EOF)에 도달하면 모든 이러한 읽기 메서드는 빈 값을 반환합니다.
>>> f.readlines() ['이것은 제 첫 번째 파일\n', '이 파일\n', '세 줄을 포함하고 있습니다\n']
파일 객체는 여러 가지 메서드가 사용할 수 있습니다. 중요한 몇 가지는 위의 예제에서 사용되었습니다.
이는 텍스트 모드에서 사용할 수 있는 메서드의 전체 목록이며 간단한 설명을 포함하고 있습니다。
close() | 파일을 닫습니다。 |
detach() | 버퍼에서 원시 스트림(raw stream)을 분리합니다。 |
fileno() | 운영 체제의 관점에서 스트림을 나타내는 숫자를 반환합니다。 |
flush() | 내부 버퍼를 새로운 상태로 만듭니다。 |
isatty() | 파일 스트림이 상호작용적인지 반환합니다。 |
read() | 파일 내용을 반환합니다。 |
readable() | 파일 스트림을 읽을 수 있는지 반환합니다。 |
readline() | 파일 내의 한 행을 반환합니다。 |
readlines() | 파일 내의 행 목록을 반환합니다。 |
seek() | 파일 위치를 변경합니다。 |
seekable() | 파일 위치를 변경할 수 있는지 반환합니다。 |
tell() | 현재 파일 위치를 반환합니다。 |
truncate() | 파일을 지정된 크기로 조정합니다。 |
writeable() | 파일에 쓰기가 가능한지 반환합니다。 |
write() | 지정된 문자열을 파일에 쓰기。 |
writelines() | 문자열 목록을 파일에 쓰기。 |