본문 바로가기
Python/개념

Day 8-2. 파일 입출력

by 사라리24 2024. 3. 20.
SMALL
더보기

 

 

스트림을 통해서 윈도우 안에 파일을 생성한다. - 출력

운영체제의 힘을 빌려서 파일을 입출력한다.

 

input: 파이썬으로 가지고오기

output: 파이썬 밖으로 생성

파일열기: input + output, 둘 다 하는 것

(파일 기존에 있던 것을 확인한다? X)

 

 

1. 파일 열기

파이썬에서 파일 입출력은 다양한 용도로 사용됩니다텍스트 파일바이너리 파일, CSV 파일, JSON 파일 등을 읽고   있습니다. 파일을 열려면 open 함수를 사용합니다.

 

 
  f = open("파일명", "모드")
 

 

파일명: 열고자 하는 파일의 이름이나 경로
모드: 파일을 어떻게 열 것인지를 지정

r: 읽기 모드 (기본값) -> 안으로 input

w: 쓰기 모드 (파일이 있으면 덮어쓰기) -> 바깥으로 output

a: 추가 모드 (파일의 끝에 내용을 추가) 

b: 바이너리 모드 (텍스트가 아닌 바이너리 데이터를 읽고/쓸 때 사용) -> 모드선택 (ex) rw, wb

+: 읽기와 쓰기 모드

 

 

 

2. 파일 쓰기

write(): 문자열을 파일에 쓴다.

writelines(): 문자열 리스트를 파일에 쓴다.

 

 

 
  f = open("example.txt", "w")
  # example 파일 생성한 후, 쓰기모드에 해당하는 f라는 객체
 
  f.write("Hello, Python!\n") #문자열 리스트
 
  f.writelines(["Line 1\n", "Line 2\n"])
 
  f.close()
  # 파일 저장하고 닫기, 안하면 데이터가 저장되지 않음


 

close 메서드를 사용해 파일을 닫습니다파일을 닫지 않으면 데이터 손실이 발생할  있습니다.

 

 

 

 
  file = open('data.txt', 'wt')
  for i in range(10):
      file.write('파일 열기 테스트: ' + str(i) + '\n') # \n: 파일 내에서 개행
  file.close()
  print('data.txt 파일에 쓰기 완료!')
 
data.txt 파일에 쓰기 완료!

 

 

 

※  파일 경로

  파일 경로는 파일의 위치를 나타내는 문자열입니다 경로를 통해 파이썬은 파일을 찾아서 해당 파일을 읽거나   있습니다파일 경로는 크게 상대 경로와 절대 경로  가지로 구분됩니다.

 

  • 상대 경로 (Relative Path):  (ex. 코렙)
    현재 작업 디렉토리에 대한 파일의 위치를 나타냅니다.

    "data.txt": 현재 디렉토리의 data.txt 파일 (윈도우)
    "./data.txt": 현재 디렉토리의 data.txt 파일 (리눅스 계열)
    ㄴ두개 다 가능합니다.

    "subfolder/data.txt": 현재 디렉토리의 하위 폴더 subfolder 안의 data.txt 파일
    "../siblingfolder/data.txt": 현재 디렉토리와 상위폴더, 동일한 위치의 다른 폴더 siblingfolder 안의 data.txt 파일

  • 절대 경로 (Absolute Path):
    파일 시스템의 루트부터의 전체 경로를 나타냅니다.
    예 (Windows):
    "C:\\Users\\UserName\\Documents\\data.txt"
    예 (Linux/Mac):
    "/home/username/Documents/data.txt"

 

 

3. with 문 사용하기

  파이썬의 with 문을 사용하면 파일을 열고 작업을 수행한  자동으로 파일을 닫을  있습니다. 

 

 
  # 다른 파일에서 동시에 엑세스 하면 제대로 읽지 못하거나 저장이 되지 않음
  # with문 사용하면 자동으로 파일을 닫으면서 저장함
  with open('./data/word.txt', 'w') as f: #f 라는 객체: data폴더에 word.txt 만들기
      while True:
          data = input('단어를 입력하세요: ')
          if data.lower() == 'quit':
              break
          f.write(data + '\n'#f 객체 구간 끝나면 바로 닫고 저장됨


단어를 입력하세요: 하하
단어를 입력하세요: 히히
단어를 입력하세요: quit

 

 

 

 

 

4. 파일 읽기

read(): 파일의 모든 내용을 문자열로 반환

readline(): 파일의 한 줄을 문자열로 반환

readlines(): 파일의 모든 줄을 리스트로 반환

 

 
  f = open("example.txt", "r") # f객체 : example.txt를 r모드로 읽어오기
  content = f.read()
  print(content)
  f.close()


Hello, Python!
Line 1
Line 2

 

 

 
  f = open('example.txt', 'rt')
  data = f.read(10) #10글자만 읽겠다!
  print(data)
  f.close()
 
Hello, Pyt

 

 
  f = open('example.txt', 'r')
  while True:
      data = f.read(10)
      if not data:   # 데이터가 없으면 break
          break
      print(data, end='')  # 데이터가 있으면 옆으로 출력해라
 
Hello, Python!
Line 1
Line 2
 
  with open('./data/word.txt', 'r') as f:
      lines = []
      while True:
          line = f.readline()
          if not line:
              break
          if len(line.strip()) != 0:
              print(line, end='')
              lines.append(line.strip())
  print(lines)
 
Hello, Python!
Line 1
Line 2

 

 
  with open('./data/word.txt', 'r') as f:
      lines = []
      while True:
          line = f.readline() # 한줄을 읽어오기
          if not line: # 데이터가 없으면 break
              break
          if len(line.strip()) != 0: # 공백을 제거하고 나서 읽었는데 공백이 아닌 경우
              print(line, end='')
              lines.append(line.strip()) # 공백 없이 list에 넣어줘
  print(lines) # 리스트로 잘 들어갔는지 확인
 
하하
히히
['하하', '히히']

 

 

 
  #readlines 역할 :
 
  with open('./data/word.txt', 'r') as f:
      lines = f.readlines()
      print(lines)

  li=[]
  for i in lines:
    li.append(i.replace('\n','')) #li에 replac적용해서 담아라
  print(li)  #lines은 수정되지 않기 때문에
               새로운 변수 li에 담아야 함
 


['하하\n', '히히\n']
['하하', '히히']

 

5. 예외 처리와 함께 사용하기

파일 입출력 중에는 여러 가지 오류가 발생할  있습니다. (파일이 존재하지 않음). 
이를 위해 try-except 블록을 사용해 오류를 처리할  있습니다.

 

  • 파일이 존재하지 않을 경우
 
   with open("nofile.txt", "r") as f:
          content = f.read()
          print(content)
 
---------------------------------------------------------------------------
FileNotFoundError                         Traceback (most recent call last)
<ipython-input-2-eb6bfe1a0fee> in <cell line: 1>()
----> 1 with open("nofile.txt", "r") as f:
      2        content = f.read()
      3        print(content)

FileNotFoundError: [Errno 2] No such file or directory: 'nofile.txt'

 

 
  try:
      with open("nofile.txt", "r") as f:
          content = f.read()
          print(content)
  except FileNotFoundError:
      print("파일이 존재하지 않습니다.")
 
    # 파일이 없어 오류가 뜨는 경우, 무조건 예외처리를 해줍니다.
 
파일이 존재하지 않습니다.

 

'Python > 개념' 카테고리의 다른 글

Day 9-2. 파일 입출력 라이브러리  (0) 2024.03.21
Day 9-1. 변수 타입 어노테이션  (0) 2024.03.21
Day 8-1. 파이썬 모듈  (0) 2024.03.20
Day 7. 과제_주민번호 유효성 검사  (0) 2024.03.20
Day 6. 과제_가위바위보  (0) 2024.03.18