파이썬에서 텍스트 파일쓰기

JHKim·2023년 10월 20일
0

Python_study_note

목록 보기
7/7
post-thumbnail

.txt 파일 쓰기

파이썬에서 외부 자원 txt파일을 사용할 수 있다.
기본 함수

  • open('디렉토리 경로', 'w' or 'r')로 텍스트 파일 열기
  • 디렉토리 경로의 역슬래쉬는 /로 꼭 바꿔주어야함
  • 'w': 쓰기 모드로 열기
  • 'r': 읽기 모드로 열기
  • read() or write(): 읽기 또는 쓰기
  • close(): 텍스트 파일 닫기. 꼭 닫아줘야 함(외부자원 메모리)
  • 쓰기 모드에서 파일명 새로 입력하면 경로 안에 파일 생성됨
  • txt파일에 문자를 쓰고 나면, 문자 개수를 반환할 수 있다.
file = open('E:데이터스쿨/pythonEx/pythonTxt/test.txt', 'w')

strCnt = file.write('Hi! hello world!')
print(f'길이: {strCnt}')   # 길이 반환

file.close()   #꼭 닫기
<result>
길이: 16

'w': 쓰기 모드

기존에 있던 파일 내용을 새로운 내용으로 덮어쓰기 하는 모드

'r': 읽기 전용 모드

외부 텍스트 파일의 내용 읽어오는 모드

  • 무조건 문자형으로 반환
  • 텍스트 파일 내용 수정 불가
file = open('E:/JIHYUN/데이터스쿨/pythonEx/pythonTxt/aboutPython.txt', 'r')

str = file.read()
print(str)

file.close()   //파일 열고, 내용 읽어 온 다음에, 파일 닫기

str = str.replace('Python', '파이썬', 2)   //a를 b로 바꾼다, 앞에서 2개 까지만
print(str)

file = open('E:/JIHYUN/데이터스쿨/pythonEx/pythonTxt/aboutPython.txt', 'w')
file.write(str)
file.close()
<result>
Python은 1991년 네덜란드계 소프트웨어 엔지니어인 귀도 반 로섬이 발표한 고급 프로그래밍 언어로, 인터프리터를 사용하는 객체지향 언어이자 플랫폼에 독립적인, 동적 타이핑(dynamically typed) 대화형 언어이다. Python이라는 이름은 귀도가 좋아하는 코미디인〈Monty Python's Flying Circus〉에서 따온 것이다. 
파이썬은 1991년 네덜란드계 소프트웨어 엔지니어인 귀도 반 로섬이 발표한 고급 프로그래밍 언어로, 인터프리터를 사용하는 객체지향 언어이자 플랫폼에 독립적인, 동적 타이핑(dynamically typed) 대화형 언어이다. 파이썬이라는 이름은 귀도가 좋아하는 코미디인〈Monty Python's Flying Circus〉에서 따온 것이다. 

텍스트 파일 열기 모드 정리

  • 파일을 어떤 목적으로 open할지 정함
  • 'w': 쓰기 전용(파일이 있으면 덮어쓰기, 없으면 새로 만듦)
  • 'a': 쓰기 전용(파일이 있으면 내용 다음에 덧붙임)
    - 로그 남길 때 사용
  • 'x': 쓰기 전용(파일 새로 만들어서 쓰기, 파일이 있으면 에러 발생)
  • 'r': 읽기 전용(파일 있을 때만 사용 가능, 파일이 없으면 에러 발생)

with open(uri, '?') as ~:문

  • close() 파일 닫기를 생략해도 된다.
  • as 뒤에 적는 닉네임으로 파일명을 간략화하여 쓰기 편하다.

writelines()

반복 가능한 객체들(list, tuple data)을 파일에 쓸 때 사용

  • 어떤 리스트 안에 있는 데이터들을 텍스트 파일 안에 쓰려고 할 때 writelines()를 쓰면 간단하게 가능
  • 다수의 아이템들을 한 번에 파일에 쓸 수 있다.
  • 반복 가능한 데이터를 인수로 넣기
uri = 'E:/JIHYUN/데이터스쿨/pythonEx/pythonTxt/'

languages = ['c++', 'java', 'javascript', 'python', 'c#']

# 이렇게 반복문으로 넣어야 했던 작업을
for item in languages:
    with open(uri + 'lang.txt', 'a') as f:
        f.write(item)
        f.write('\n')

# writelines()를 이용해 한 번에 가능
with open(uri + 'lang.txt', 'a') as f:
    f.writelines(languages)   # 반복 가능한 개체를 넣어줌!

    f.writelines(item + '\n' for item in languages)   # 개행하고 싶다면

# 쓴 것 읽어보기
with open(uri + 'lang.txt', 'r') as f:
    file = f.read()

print(file)
c++
java
javascript
python
c#

readlines(), readline()

readlines()

파일의 모든 데이터를 읽어 리스트 형태로 반환한다.

  • 출력된 리스트는 문자열
  • 개행까지가 1개의 아이템
    - 개행까지 읽어온다.

readline()

한 행만 읽어서 문자열로 반환한다.

uri = 'E:데이터스쿨/pythonEx/pythonTxt/'

# readlines()사용한 경우
with open(uri + 'lang.txt', 'r') as f:
    langList = f.readlines()
    print(langList)
    print(type(langList))

# readline()사용한 경우
with open(uri + 'lang.txt', 'r') as f:
    langLine = f.readline()

    while langLine != '':   #아이템이 없기 전까지 반복해서 읽어오기
        print(f'langLine: {langLine}')
        langLine = f.readline()
<result>
['c++\n', 'java\n', 'javascript\n', 'python\n', 'c#']
<class 'list'>

# readline()에서 한 줄씩 더 떨어지는 이유는 print의 개행 + 텍스트파일 속 \n 때문
# 이중개행 없애려면-> print(f'langLine: {langLine}', end='')  

langLine: c++  

langLine: java

langLine: javascript

langLine: python

langLine: c#

  • split(구분자): 구분자 기분으로 쪼개고 리스트로 반환하기
  • strip(): 안에 들어가는 부분 지우기
scoreDic = {}

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

    while line != '':
        tempList = line.split(':')
        # split(구분자) = 구분자를 중심으로 문자열을 잘라서 리스트 데이터로 반환해줌
        scoreDic[tempList[0]] = int(tempList[1].strip('\n'))
        # tempList의 0번째를 키로 만들어서 = 1번째 값을 밸류로, 
        # strip으로 지우고 정수로 캐스팅
        line = f.readline()

print(f'scoreDic: {scoreDic}')
<result>
scoreDic: {'kor': 85, 'eng': 90, 'math': 92, 'sci': 79, 'his': 82}

0개의 댓글