Language/Python

[Python] 텍스트파일

Sh-YE 2024. 6. 6. 16:05

파이썬 내부자원 console창이 아닌 외부자원인 텍스트파일에서 다루기.

-파이썬 내장함수 open(),read(),write(),close() 를 이용

open('파일경로','파일모드')

1) 파일경로

C:/pythonTxt/test.txt 처럼 역슬래시가 아닌 슬래시로 변경.

 

2)  파일모드

- 파일모드는 파일을 어떤목적으로 open할지 정한다.

  • 'w' : 쓰기전용 (파일이 있으면 덮어씌움)
  • 'a' : 쓰기전용 (파일이 있으면 덧붙임)
  • 'x' : 쓰기전용 (파일이 있으면 에러발생)
  • 'r' : 읽기전용 (파일이 없으면 에러발생)

1. write()

file = open('C:/pythonTxt/test.txt','w') #파일을 쓰기위해서는 먼저 파일을 열어준다.

strCnt = file.write('Hello')
print(f'strCnt: {strCnt}')

file.close() #외부자원 연결해제

 

2. read()

file = open('C:/pythonTxt/test.txt','r') 

str = file.read()
print(f'str: {str}')

file.close() #외부자원 연결해제

 

file = open('D:/pythonTxt/aboutPython.txt','r', encoding='UTF8')

str = file.read()
print(f'str: {str}')

file.close()

# 읽어온 파일의 텍스트'python' -> '파이썬' 3개 바꾸기
str = str.replace('Python','파이썬', 3)
print(f'str: {str}')

# 변경한 내용 덮어쓰기
file = open('D:/pythonTxt/aboutPython.txt')
file.wirte(str)
file.close()

 

3) with ~ as문

with ~ as문을 이용하면 파일닫기(close) 를 생략할 수 있다.

uri = 'D:/pythonTxt/'
# file = open(uri + 'test.txt','r')
# str = file.read()
# print(f'str: {str}')
# file.close() #외부자원 연결해제

with open(uri + 'test.txt','r') as f:
    print(f.read())

 

4) writelines()

writelines()는 리스트 또는 튜플 데이터를 파일에 쓰기위한 함수이다.

languages = ['c/c++','java','c#','python','js']
uri = 'D:/pythonTxt/'

 for item in languages:
     with open(uri + 'lang.txt','a') as f:
         f.write(item)
         f.write('\n')

 

위 코드를 writelines() 함수 사용해 수정.

languages = ['c/c++','java','c#','python','js']
uri = 'D:/pythonTxt/'

with open(uri + 'lang.txt','a') as f:
    # f.writelines(languages)
    
    # 개행을 위해 수정.
    f.writelines(item + '\n' for item in languages)

 

* 자료형(딕셔너리,리스트)을 그대로 저장하기 위해선 아래와 같은 형태로도 사용가능.

scoreDic = {'kor':85, 'eng':90, 'mat':92, 'his':82}

uri = 'D:/pythonTxt/'

with open(uri+'score.txt','a') as f:
     print(scoreDic,file=f)

5) readlines(),readline()

- readlines() : 파일의 모든 데이터를 읽어서 리스트형태로 반환.

uri = 'D:/pythonTxt/'

with open(uri + 'lang.txt','r') as f:
    langlist = f.readlines()

print(f'langlist : {langlist}')
print(f'langlist type: {type(langlist)}')

>>>
langlist : ['c/c++\n', 'java\n', 'c#\n', 'python\n', 'js\n']
langlist type: <class 'list'>

 

- readline() : 한 행을 읽어서 문자열로 반환

uri = 'D:/pythonTxt/'

with open(uri + 'lang.txt','r') as f:
    langlist = f.readline()

print(f'langlist : {langlist}')
print(f'langlist type: {type(langlist)}')

>>>
langlist : c/c++
langlist type: <class 'str'>