[Python] 텍스트 파일

·2023년 3월 8일
0

[Python] 제로베이스

목록 보기
11/11
post-thumbnail

✒️ 기본 함수

open(),read(), write(), close()를 이용한 텍스트 파일 다루기


path = "C:/Users/YUN/Python/pythontxt.txt"
file = open(path, 'w')
strCnt = file.write('Hello World')
print(f'strCnt : {strCnt}')
file.close()

📌결과
strCnt : 11

✒️ 파일 쓰기

✍️실습

다음과 같이 시스템 시간과 일정을 텍스트 파일에 작성해 보자.


import time

path = "C:/Users/YUN/Python/current_time.txt"

lt = time.localtime()
file = open(path, 'w')
str = '[' + str(lt.tm_year) + '년 ' + str(lt.tm_mon) + '월 ' + str(lt.tm_mday) + '일]' \
                                                                                'python study'
file.write(str)
file.close()


📌결과
[202338]python study

✒️ 파일 읽기

read() 함수를 이용한 파일 문자열 읽기


import time

path = "C:/Users/YUN/Python/current_time.txt"
file = open(path, 'w')  # 'w' 덮어쓰기, 'r' 읽기, 'a' 이어쓰기
dateStr = time.strftime('[ %y-%m-%d %p %I(%H):%M  ]')
file.write(dateStr)
file = open(path, 'r')  # 'w' 덮어쓰기, 'r' 읽기, 'a' 이어쓰기
str = file.read()
print(str)
file.close()



📌결과
[ 23-03-08 PM 07(19):07  ]

✍️실습

텍스트 파일에서 Python -> 파이썬으로 변경 후 저장

path = "C:/Users/YUN/Python/test.txt"

file = open(path, 'w')
file.write('Python은 1991년 네덜란드계 소프트웨어 엔지니어인 \
귀도 반 로섬이 발표한 고급 프로그래밍 언어로, 플랫폼에 독립적이며 \
인터프리터식, 객체지향적, 동적 타이핑(dynamically typed) 대화형 언어이다.\
           Python이라는 이름은 귀도가 좋아하는 코미디인〈Monty Python\'s Flying Circus〉에서 따온 것이다')
file.close()

file = open(path, 'r')
str = file.read()
print(str)
str = str.replace('Python', '파이썬', 2)
print(str)
file.close()

file = open(path, 'w')
file.write(str)
file.close()


📌결과
Python은 1991년 네덜란드계 소프트웨어 엔지니어인 귀도 반 로섬이 발표한 고급 프로그래밍 언어로, 플랫폼에 독립적이며 인터프리터식, 객체지향적, 동적 타이핑(dynamically typed) 대화형 언어이다.Python이라는 이름은 귀도가 좋아하는 코미디인〈Monty Python's Flying Circus〉에서 따온 것이다
파이썬은 1991년 네덜란드계 소프트웨어 엔지니어인 귀도 반 로섬이 발표한 고급 프로그래밍 언어로, 플랫폼에 독립적이며 인터프리터식, 객체지향적, 동적 타이핑(dynamically typed) 대화형 언어이다.파이썬이라는 이름은 귀도가 좋아하는 코미디인〈Monty Python's Flying Circus〉에서 따온 것이다

파일 모드

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

  • 'w' : 쓰기 전용- 파일이 존재하면 내용 덮어씌움
  • 'a' : 쓰기 전용 - 파일이 존재하면 내용 덧붙임
  • 'x' : 쓰기 전용 - 파일이 존재하면 에러 발생
  • 'r' : 읽기 전용 - 파일이 전재하지 않으면 에러 발생

path = "C:/Users/YUN/Python"
# 'w' 모드
file = open(path + '/hello.txt', 'w')
file.write('Hello World')
file.close()

# 'a' 모드
file = open(path + '/hello.txt', 'a')
file.write('\n I love Python')
file.close()

# 'x' 모드 FileExistsError
# file = open(path + '/hello.txt', 'x')
# file.write('\n I love Python')
# file.close()
#
# 'r' 모드
file = open(path + '/hello.txt', 'r')
str = file.read()
print(str)


📌결과
Hello World
 I love Python

✍️실습

사용자가 입력한 숫자에 대한 소수를 구하고 이를 파일에 작성해보자

def writePrimeNumber():
    path = "C:/Users/YUN/Python"
    file = open(path + '/prime.txt', 'a')
    number = int(input('input numbers : '))

    for i in range(2, number + 1):
        flag = True

        for j in range(2, i):
            if i % j == 0 and i != j:
                flag = False
        if flag:
            file.write(str(i))
            file.write(str('\n'))
    
    file.close()       
     


def readFile():
    path = "C:/Users/YUN/Python"
    file = open(path + '/prime.txt', 'r')
    print('Primes Number\n' + file.read())
    file.close()

writePrimeNumber()
readFile()

📌결과
input numbers : 50
Primes Number
2
3
5
7
11
13
17
19
23
29
31
37
41
43
47

✒️ 파일 읽기/쓰기 관련 함수

with ~ as 문

path = "C:/Users/YUN/Python"

file = open(path + 'asWith.txt', 'a')
file.write('python study')
file.close()

file = open(path + 'asWith.txt', 'r')
str = file.read()
print(str)
file.close()

with open(path + 'asWith.txt', 'a') as f:
    f.write('\nUse As ~ With')

with open(path + 'asWith.txt', 'r') as f:
    print(f.read())
    
    
📌결과   
python studypython study
python studypython study
Use As ~ With

✍️실습

로또 번호 생성기 프로그램 만들고 파일 번호 출력
def lottoNumber(nums):
    for idx, num in enumerate(nums):
        with open(path + '/Lotto.txt', 'a') as f:
            if idx < len(nums) - 2:
                f.write(str(num) + ', ')
            elif idx == len(nums) - 2:
                f.write(str(num) + '\n')
            else:
                f.write('bonus : ' + str(num))
    with open(path + '/Lotto.txt', 'r') as f:
        print(f.read())


nums = random.sample(range(1, 46), 7)
lottoNumber(nums)


📌결과
41, 44, 23, 25, 37, 22
bonus : 18

writelines()

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


languages = ['c/c++', 'java', 'python', 'kotlin', 'c#']
for item in languages:
    with open(path + 'languages.txt', 'a') as f:
        f.write(item)
        f.write('\n')
        
--------------------------------------------------------------

languages = ['c/c++', 'java', 'python', 'kotlin', 'c#']
with open(path + 'languages_line.txt', 'a') as f:
    f.writelines(item + '\n' for item in languages)
print(languages, file=f) #리스트로 출력 

📌결과
c/c++
java
python
kotlin
c#        
['c/c++', 'java', 'python', 'kotlin', 'c#']

readlines()

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


with open(path + 'languages.txt', 'r') as f:
    lanList = f.readlines()

print(f'lanList : {lanList}')
print(f'lanList Type : {type(lanList)}')


📌결과
lanList : ['c/c++\n', 'java\n', 'python\n', 'kotlin\n', 'c#\n']
lanList Type : <class 'list'>
with open(path + 'languages.txt', 'r') as f:
    line = f.readline()

    while line != '':
        print(f'line : {line}', end='')
        line = f.readline()
        
        
📌결과
line : c/c++
line : java
line : python
line : kotlin
line : c#

✍️실습

파일에 저장된 과목별 점수를 파이썬에 읽어, 딕셔너리에 저장하는 코드를 만들어보자
scoreDic = {}

with open(path + 'scores.txt', 'r') as file:
    line = file.readline()
    while line != '':
        num = line.find(':')
        item = line[:num]
        try:
            key = int(line[num:])
        except:
            key = int(line[num + 1:])

        scoreDic.update({item: key})
        line = file.readline()

print(scoreDic)


📌결과
{'kor': 90, 'eng': 70, 'math': 95, 'science': 80}


scoreDic = {}

with open(path + 'scores.txt', 'r') as file:
    line = file.readline()
    while line != '':
        scoreList = line.split(':')
        item = scoreList[0]
        key = int(scoreList[1].strip('\n'))
        scoreDic[item] = key
        line = file.readline()

print(scoreDic)

📌결과
{'kor': 90, 'eng': 70, 'math': 95, 'science': 80}



파이썬 중급 강의 fin (230309)
소감
드디어 중급 강의를 완료했다.
아직 더 중요한 연습문제가 남았지만,, 그래도 커리큘럼에 잘 따라가고 있어 보람이 든다ㅎㅎ
데이터 분석 초기 단계라 실습문제나 연습문제 풀기에 큰 어려움이 없지만 과거 개발 공부를 할 때 하루를 다 써도 문제를 해결하지 못한 경험들이 있어서 앞으로 훨씬 난이도가 높아질거란 생각이 든다. 그렇기 때문에 초반에는 커리큘럼 보다 진도 속도를 높일 생각이다. 초반에 무너지면 따라잡기 힘드니까 계속 힘내야지 !!
profile
개발하고싶은사람

0개의 댓글