파일
파일은 이름이 있는 외부 메모리의 데이터 집합입니다.
Python에는 두 가지 유형의 파일이 있습니다.
-
텍스트, 한 줄에 끊어진 텍스트를 포함합니다. 텍스트 파일의 특수 문자 중 개행 문자("
\n
")만 있을 수 있으며 줄의 시작 부분("
\r
")으로 돌아갈 수 있습니다. ;);
-
바이너리: 모든 바이너리 데이터를 제한 없이 저장합니다(예: 사진, 사운드, 비디오 등).
다음으로 텍스트 파일 작업을 고려할 것입니다.
프로그램에서 파일로 작업하는 원리
세 단계로 구성됩니다.
1. 파일 열기;
2. 파일 작업;
3. 파일을 닫습니다.
이 작동 원리를
"샌드위치 원리"라고 합니다..
파일을 열 때 작업 모드가 표시됩니다: 읽기, 쓰기 또는 파일 끝에 데이터 추가. 열려 있는 파일은 차단되어 다른 프로그램에서 접근할 수 없습니다. 파일이 닫히면 프로그램이 이 파일에서 변경한 모든 내용이 디스크에 기록됩니다. Python은 파일 변수를 통해 파일과 함께 작동합니다.
open()
함수는
파일 열기를 허용하고 파일에 액세스하는 데 사용할 수 있는 파일 변수를 반환합니다.
f = open(file_name, access_mode)
,
위치:
-
file_name
- 열려는 파일의 이름
-
access_mode
- 파일 열기 모드. 읽기, 쓰기 등일 수 있습니다. 달리 지정하지 않는 한 기본 모드는 읽기(r)입니다.
파일 열기 모드의 전체 목록
<헤드>
모드 |
설명 |
것>
<몸>
<코드>r |
읽기 전용. |
<코드>w |
쓰기만 가능합니다. 지정된 이름으로 찾을 수 없는 경우 새 파일을 생성합니다. |
rb |
읽기 전용(바이너리). |
wb |
쓰기 전용(바이너리). 지정된 이름으로 찾을 수 없는 경우 새 파일을 생성합니다. |
r+ |
읽고 쓰기용 |
rb+ |
읽기 및 쓰기용(바이너리). |
w+ |
읽기 및 쓰기용. 지정된 이름으로 찾을 수 없는 경우 쓰기 가능한 새 파일을 생성합니다. |
wb+ |
읽기 및 쓰기용(바이너리). 지정된 이름으로 찾을 수 없는 경우 쓰기 가능한 새 파일을 생성합니다. |
<코드>a |
새 콘텐츠를 추가하기 위해 열립니다. 지정된 이름으로 찾을 수 없는 경우 쓰기 가능한 새 파일을 생성합니다. |
a+ |
새 콘텐츠를 추가하기 위해 열립니다. 지정된 이름으로 항목을 찾을 수 없는 경우 항목을 읽을 새 파일을 만듭니다. |
ab |
새 콘텐츠(바이너리)를 추가하기 위해 엽니다. 지정된 이름으로 찾을 수 없는 경우 쓰기 가능한 새 파일을 생성합니다. |
ab+ |
새 콘텐츠(바이너리)를 추가하기 위해 엽니다. 지정된 이름으로 항목을 찾을 수 없는 경우 항목을 읽을 새 파일을 만듭니다. |
테이블>
close()
메서드를 사용하면 파일을 닫을 수 있습니다.
예
Fin = open("input.txt")
Fout = open("output.txt")
# 파일로 작업 수행
fout.close()
핀.닫기()
기존 파일을 쓰기 위해 열면 해당 내용이 삭제됩니다. 프로그램 종료 후 열려 있는 모든 파일이 자동으로 닫힙니다.
파일에서 데이터 읽기
텍스트 파일을 읽을 때 바이트 스트림은 순차적으로 프로그램 입력에 입력되므로 파일은 데이터에 대한 순차적 액세스를 제공합니다. 즉, 파일에서 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")
|