Ch3 파이썬 중급 34-39 (중급8-9)

김민지·2023년 3월 13일
0

Part 01. Python

목록 보기
9/12
  1. 텍스트파일 관련 기본함수 (순서 중요!)
  • open() : 파일 열기
  • read() or write() : 파일 읽기 혹은 쓰기
  • close() : 파일 닫기
  1. 텍스트파일 쓰기
file = open('C:/pythonTxt/text.txt', 'w')
file.write('Hello python')
file.close()

-> 'w': 쓰기모드로 연다는 뜻
-> pythonTxt 경로에 text.txt 파일이 없으면 새로 만들어줌
-> write는 기존문자를 다 없애고 새로운 문자로 덮어버림
-> 반드시 마지막에 파일 닫기!
-> 숫자를 쓸 때는 반드시 str로 캐스팅 해줘야 함

  1. 텍스트파일 읽기
file = open('C:/pythonTxt/test.txt', 'r')

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

file.close()

-> 'r': 읽기모드로 연다는 뜻
-> 파이썬에 파일 텍스트를 출력함 (자료형은 항상 문자열)

dateStr = '[' + time.strftime('%Y-%m-%d %H:%M:%S %p') + ']'

-> [2023-03-13 14:30:21 PM]으로 출력

-> 시간표현- %H: 14시로 출력, %I : 2시로 출력
-> %m: 월, %M: 분
-> %p: AM/PM

str = str.replace('Python', '파이썬', 2)

-> 문자열에서 'Python'을 '파이썬'으로 수정함. 2개만 수정.
-> str로 텍스트파일을 수정하기 위해서는 write()를 써야 함.

  1. 텍스트파일 열기
  • 파일모드 : 파일을 어떤 목적으로 open할지 정함

    'w' : 쓰기 전용 (파일이 있으면 덮어씌움, 파일이 없으면 새로 만듬) - 새로 쓰는거
    'a' : 쓰기 전용 (파일이 있으면 덧붙임, 파일이 없으면 새로 만듬) - 기존 + 추가
    'x' : 쓰기 전용 (파일이 있으면 에러 발생, 파일이 없으면 새로 만듬)
    'r' : 읽기 전용 (파일이 없으면 에러 발생, 파일이 있을 때만 읽을 수 있음)

for number in range(2, (inputNumber + 1)):
    flag = True
    for n in range(2, number):
        if number % n == 0:
            flag = False
            break
    if flag:
        writePrimeNumber(number)

-> 입력한 숫자보다 작은 소수들 구하기

  1. with ~ as
  • 파일닫기(close)를 생략 가능하게 함
with open(uri + '5_037.txt', 'a') as f:
    f.write('python study!!')
with open(uri + '5_037.txt', 'r') as f:
    print(f.read())
  • 로또 번호 생성 프로그램
import random

uri = 'C:/pythonTxt/'

def writeNumbers(nums):
    for idx, num in enumerate(nums):
        with open(uri + 'lotto.txt', 'a') as f:
            if idx < (len(nums) - 2):
                f.write(str(num) + ', ')
            elif idx == (len(nums) - 2):
                f.write(str(num))
                f.write('\n')
            elif idx == (len(nums) - 1):
                f.write('bonus: ' + str(num))
                f.write('\n')

rNums = random.sample(range(1, 46), 7)
print(f'rNums: {rNums}')

writeNumbers(rNums)

생성된 파일내용

26, 34, 5, 6, 29, 9
bonus: 8

-> idx: nums리스트의 인덱스(순서 0부터 시작)
-> len(nums): nums리스트의 길이(value가 몇 개인지)
-> enumerate(nums): nums리스트의 인덱스와 value를 꺼낼 수 있음

  1. writelines()
  • 리스트 또는 튜플 데이터를 파일에 쓰기 위한 함수
languages = ['c/c++', 'java', 'c#', 'python', 'javascript']

uri = 'C:/pythonTxt/'
with open(uri + 'languages.txt', 'a') as f:
    f.writelines(languages)

-> languages리스트의 value를 차례로 파일에 씀

    f.writelines(item + '\n' for item in languages)

-> for문을 이용해 개행

  • 딕셔너리 = {key: value, key: value, key: value ...}
    -> scoreDic[key] : key의 value값
print(scoreDic, file=f)

-> 딕셔너리 자체를 그대로 출력

  1. readlines(), readline()
  • readlines() : 파일의 모든 데이터를 읽어서 리스트 형태로 반환
with open(uri + 'lans.txt', 'r') as f:
    lanList = f.readlines()

-> 개행을 구분자로 둬서 한 행씩 읽어 각각이 리스트의 value가 됨

  • readline() : 한 행을 읽어서 문자열로 반환
with open(uri + 'lans.txt', 'r') as f:
    line = f.readline()
    
    while line != '':
        print(f'line: {line}', end='')
        line = f.readline()

-> while line != '': 라인에 내용이 비어있지 않다면, 출력하라

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

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

    while line != '':
        tempList = line.split(':')
        scoreDic[tempList[0]] = int(tempList[1].strip('\n'))

        line = f.readline()

print(f'scoreDic: {scoreDic}')
  • tempList = line.split(':') -> ':'를 구분자로 나눠 리스트로 반환
  • int(tempList[1].strip('\n')) -> 키(과목)에 점수를 넣음('\n'은 잘라냄)

<제로베이스 데이터 취업 스쿨>

0개의 댓글