파일

파일은 이름이 있는 외부 메모리의 데이터 집합입니다. 

Python에는 두 가지 유형의 파일이 있습니다.
- 텍스트, 한 줄에 끊어진 텍스트를 포함합니다. 텍스트 파일의 특수 문자 중 개행 문자("\n")만 있을 수 있으며 줄의 시작 부분("\r")으로 돌아갈 수 있습니다. ;);
- 바이너리: 모든 바이너리 데이터를 제한 없이 저장합니다(예: 사진, 사운드, 비디오 등).

다음으로 텍스트 파일 작업을 고려할 것입니다.

 

프로그램에서 파일로 작업하는 원리
세 단계로 구성됩니다.
1. 파일 열기;
2. 파일 작업;
3. 파일을 닫습니다.
이 작동 원리를 "샌드위치 원리"라고 합니다..

파일을 열 때 작업 모드가 표시됩니다: 읽기, 쓰기 또는 파일 끝에 데이터 추가. 열려 있는 파일은 차단되어 다른 프로그램에서 접근할 수 없습니다. 파일이 닫히면 프로그램이 이 파일에서 변경한 모든 내용이 디스크에 기록됩니다. Python은 파일 변수를 통해 파일과 함께 작동합니다.

open() 함수는 파일 열기를 허용하고 파일에 액세스하는 데 사용할 수 있는 파일 변수를 반환합니다.
f = open(file_name, access_mode)
위치:
- file_name - 열려는 파일의 이름
- access_mode - 파일 열기 모드. 읽기, 쓰기 등일 수 있습니다. 달리 지정하지 않는 한 기본 모드는 읽기(r)입니다. 
 
파일 열기 모드의 전체 목록
<헤드> <몸>
 
close() 메서드를 사용하면 파일을 닫을 수 있습니다.

Fin = open("input.txt") Fout = open("output.txt")    # 파일로 작업 수행 fout.close() 핀.닫기() 기존 파일을 쓰기 위해 열면 해당 내용이 삭제됩니다. 프로그램 종료 후 열려 있는 모든 파일이 자동으로 닫힙니다.
 

모드 설명
<코드>r 읽기 전용.
<코드>w 쓰기만 가능합니다. 지정된 이름으로 찾을 수 없는 경우 새 파일을 생성합니다.
rb 읽기 전용(바이너리).
wb 쓰기 전용(바이너리). 지정된 이름으로 찾을 수 없는 경우 새 파일을 생성합니다.
r+ 읽고 쓰기용
rb+ 읽기 및 쓰기용(바이너리).
w+ 읽기 및 쓰기용. 지정된 이름으로 찾을 수 없는 경우 쓰기 가능한 새 파일을 생성합니다.
wb+ 읽기 및 쓰기용(바이너리). 지정된 이름으로 찾을 수 없는 경우 쓰기 가능한 새 파일을 생성합니다.
<코드>a 새 콘텐츠를 추가하기 위해 열립니다. 지정된 이름으로 찾을 수 없는 경우 쓰기 가능한 새 파일을 생성합니다.
a+ 새 콘텐츠를 추가하기 위해 열립니다. 지정된 이름으로 항목을 찾을 수 없는 경우 항목을 읽을 새 파일을 만듭니다.
ab 새 콘텐츠(바이너리)를 추가하기 위해 엽니다. 지정된 이름으로 찾을 수 없는 경우 쓰기 가능한 새 파일을 생성합니다.
ab+ 새 콘텐츠(바이너리)를 추가하기 위해 엽니다. 지정된 이름으로 항목을 찾을 수 없는 경우 항목을 읽을 새 파일을 만듭니다.

파일에서 데이터 읽기

텍스트 파일을 읽을 때 바이트 스트림은 순차적으로 프로그램 입력에 입력되므로 파일은 데이터에 대한 순차적 액세스를 제공합니다. 즉, 파일에서 10번째 값을 읽어야 하는 경우 먼저 이전 9번째 값을 읽어야 합니다.

파일의 한 줄을 읽으면 readline() 메서드를 실행할 수 있습니다. 이 메서드는 파일 변수에서 호출됩니다. Fin = open("input.txt") s = Fin.readline()
키보드에서 읽을 때와 마찬가지로 읽기 문자열에 다양한 메서드를 적용할 수 있습니다(split(), map() 등). 예를 들어 파일의 한 줄에 공백으로 구분된 두 개의 숫자가 있는 경우 다음과 같이 계산할 수 있습니다. Fin = open("input.txt") s = Fin.readline().split() # 공백에서 줄 분할 s = ["2007", "2021"] a, b = 맵(int, s)         # 목록 s의 모든 요소에 int() 메서드를 적용합니다.   # 즉, 문자열을 숫자로 변환 # a, b = int(s[0], s[1])   # 위의 라인과 동일합니다. # a, b = [int(x) for x in s] # 제너레이터와 동일
read() 메서드는 파일의 전체 내용을 읽고 '\n' 문자를 포함할 수 있는 문자열을 반환합니다. 정수 매개변수가 read() 메서드에 전달되면 지정된 문자 수 이상 읽히지 않습니다. 예를 들어 read(1).
메서드를 사용하여 파일을 바이트 단위로 읽을 수 있습니다.
파일이 열리면 파일의 현재 위치를 결정하는 포인터가 파일의 시작으로 설정되고 읽을 때 데이터 읽은 다음 위치로 이동합니다. 쓸 때 포인터는 다음 자유 위치로 이동합니다.

파일에 데이터 쓰기

write() 메서드는 파일에 데이터를 쓰는 데 사용됩니다. 숫자 데이터는 문자열로 변환해야 합니다. 이것은 format() 메서드 또는 str().
메서드를 사용하여 수행할 수 있습니다.
 

여러 줄 파일

여러 줄 파일로 작업할 때 파일의 데이터가 언제 소진되는지 알아야 합니다. 이렇게 하려면 readline() 메서드의 기능을 사용할 수 있습니다. 파일 커서가 파일의 끝을 가리키는 경우 readline() 메서드는 다음을 반환합니다. 거짓 부울 값으로 인식되는 빈 문자열: 동안 참:     s = Fin.readline()     s가 아닌 경우: break   # 문자열을 읽을 때 빈 문자열이 수신되면   # 루프는 break 문으로 끝납니다.     print(s, end="")  # 파일에서 한 줄을 읽을 때                        # 개행 문자 "\n" 저장됨

 

여러 줄 파일에서 데이터를 읽는 다른 방법
1. 목록의 모든 데이터를 즉시. Fin = open("input.txt") list_strings = Fin.readlines()    # 한 번에 모든 줄 읽기 핀.닫기() list_strings의 s에 대해:     print(s, end="")
2. with-as 구성 사용. 이 경우 주기가 끝나면 파일이 자동으로 닫힙니다. open("input.txt")를 Fin으로 사용:     Fin의 s에 대해:         print(s, end="") 이 구성은 파일이 닫히도록 합니다. 


3. Python 언어의 스타일로 문자열을 반복하는 방법(이 방법을 사용하는 것이 좋습니다). 이 경우 파일도 자동으로 닫힙니다. open("input.txt")의 s에 대해:     print(s, end="")

키릴 문자 파일

파일에 러시아 문자(코드가 127보다 큰 문자)가 포함되어 있으면 파일을 열 때 인코딩을 지정해야 합니다. 데이터 = open("input.txt", "r", encoding="utf-8")