본문 바로가기
DEV/파이썬 이론

파이썬 코딩 :: 파이썬 불러오기(텍스트 파일), 파이썬 split, strip

by 올커 2022. 9. 2.

파이썬 불러오기(.txt), strip, split


1. 텍스트 파일(.txt) 불러오기(읽기)

 저장된  텍스트 파일을 불러오려면 아래와 같이 with open문을 사용한다

with open('경로/파일명', 'r') as 변수명:

 여기서 경로가 동일할 경우 '/파일명' 으로 사용이 가능하다.

 'r'은 읽기(read) 모드를 나타낸다. (* 자세한 내용 링크 참고)

 아래와 같이 타입을 출력하면 <class '_io.TextIOWrapper'> 가 나타난다. 알고있는 자료형이 아니다.

with open('test.txt', 'r') as memo:
    print(type(memo))

>>> <class '_io.TextIOWrapper'>

  저장된 텍스트 파일은 아래와 같이 리스트로 만들어 사용이 가능하다.

with open('test.txt', 'r') as memo:
    for line in memo:
        print(line)

  그러나 실행시 아래와 같은 오류가 발생하였다.

UnicodeDecodeError: 'cp949' ... 찾아보니 cp949 코덱으로 인코딩 된 파일을 읽어들일 때 발생할 수 있는 문제라고 한다.

 이는 아래와 같이 UTF8로 인코딩을 지정하여 호출하면 에러가 사라진다.

with open('test.txt', 'r', encoding='UTF8') as memo:
    for line in memo:
        print(line)

2. 텍스트 파일(.txt) 불러오기(쓰기)

 파일쓰기도 파일 읽기랑 같이 with open문을 활용한다.

 차이점은 읽기는 open('파일명', 'r') 이었다면 쓰기는 open('파일명', 'w')를 사용한다.  w는 쓰기(Write)의 약자이다.

with open('new_file.txt, 'w') as f:
	f.write("Hello")
	f.write("World!")

 

## new_file.txt
HelloWorld!

 파일을 보면 띄어쓰기(' ')나 줄바꿈(\n)없이 문장이 붙어있음을 알 수 있다.

 줄바꿈을 하려면 아래와 같이 작성하면 된다.

with open('new_file.txt, 'w') as f:
	f.write("Hello\n")
	f.write("World!\n")
## new_file.txt
Hello
World!

 

그런데 이전에 작성한 내용이 삭제된 것을 확인할 수 있다. 이는 'w'는 전체를 지우고 새로 다시 쓰기 때문이다.

이를 방지하기 위해서는 'w'를 'a'로 바꾸어 사용하면 된다. a는 추가하다(append)의 약자이다.

with open('new_file.txt, 'a') as f:
	f.write("Hello\n")
	f.write("World!\n")
## new_file.txt
Hello
World!
Hello
World!

open('파일명', 'w')나 open('파일명', 'a')를 사용할 경우,

두 케이스 모두 기존에 없는 파일일 경우 새로 파일을 생성하여 내용을 삽입한다.

 

 

3. strip()

  : 문자열 앞 뒤의 화이트 스페이스(white space, " ", "\t", "\n") 제거

 위의 출력된 모습을 보면, 결과값이 한칸씩 띄워져 출력됨을 확인할 수 있다.

  텍스트파일 자체에서 각 줄별 문자열에 (\n)이 있는 것으로 인식하고,

  print문에서 end=''가 지정되지 않으면 기본적으로 줄바꿈이 되기 때문에 위와 같이 출력되는 것이다.

 strip은 문자열 앞, 뒤의 화이트 스페이스(white space, " ", "\t", "\n")를 제거해주는 역할을 한다.

## 예시 (1)
print("      abc      def       ".strip())
>>> abc      def

## 예시 (2)
print(" \t  abc \n  def  \n  ".strip())

>>> abc 
>>>   def

 이를 활용해 아래와 같이 코드를 수정하여 출력해보았다.

with open('test.txt', 'r', encoding='UTF8') as memo:
    for line in memo:
        print(line.strip())

  빈 줄이 없이 잘 출력되는 것을 확인할 수 있었다.

4. split()

  : 문자열을 일정한 기준으로 쪼개고 싶을 경우 사용한다.

문자열.split("split 기준")

   아래와 같이 일정한 기준으로 쪼개어 리스트로 반환한다.

serial_num = "1. 2. 3. 4. 5. 6"
print(serial_num.split(". "))

>>> ['1', '2', '3', '4', '5', '6']

  리스트로 반환된 요소들은 아래와 같이 인덱싱으로도 사용할 수 있다.

name = "Kim, JongKook"
name_data = name.split(', ')
last_name = name_data[0]
first_name = name_data[1]

print(first_name, last_name)

>>> JongKook Kim

화이트스페이스의 경우 split()의 괄호 안을 비워두면 깔끔하게 지울 수 있다.

print("     \n   \n  2   \t  3  \n 5 7 6    \n\n ".split())

>>> ['2', '3', '5', '7', '6']

주의할 점으로는 split으로 만들어진 리스트는 문자열(string)이므로

숫자로 사용하고 싶을 경우 int를 적용해주어야 한다.

num = "     \n   \n  2   \t  3  \n 5 7 6    \n\n ".split()
print(num[0] + num[1])
print(int(num[0]) + int(num[1]))

>>> 23
>>> 5

 

반응형

댓글