중급 파이썬 문제풀이 Part 5 - 텍스트파일
2023. 3. 16. 15:33ㆍ카테고리 없음
텍스트 파일 읽기/쓰기 프로그래밍
# 65강. 회원 계정별 텍스트 파일을 생성한 후 회원 본인 파일에 '한 줄 일기'를 쓰고 읽는 프로그램을 만들어 보자.
diary.py
import time
def writeDiary(u, f, d):
lt = time.localtime()
timeStr = time.strftime('%Y-%m-%d %I:%M:%S %p', lt)
filePath = u + f
with open(filePath, 'a') as f:
f.write(f'[{timeStr}] {d}\n')
def readDiary(u, f):
lt = time.localtime()
timeStr = time.strftime('%Y-%m-%d %I:%M:%S %p', lt)
filePath = u + f
datas = []
with open(filePath, 'r') as f:
datas = f.readlines()
return datas
import diary
members = {}
uri = 'C:/pythonTxt/'
def printMembers():
for m in members.keys():
print(f'ID: {m} \t PW: {members[m]}')
while True:
selectNum = int(input('1.회원가입,\t 2.한줄일기쓰기,\t 3.한줄일기보기,\t 4.종료 '))
if(selectNum == 1):
mId = input('input ID: ')
mPw = input('input PW: ')
members[mId] = mPw
printMembers()
elif(selectNum == 2):
mId = input('input ID: ')
mPw = input('input PW: ')
if mId in members and members[mId] == mPw:
print('login success!!')
fileName = 'myDaiary_' + mId + '.txt'
data = input('오늘 하루 인상 깊은 일을 기록하세요. ')
diary.writeDiary(uri, fileName, data)
else:
print('login fail!!')
printMembers()
elif (selectNum == 3):
mId = input('input ID: ')
mPw = input('input PW: ')
if mId in members and members[mId] == mPw:
print('login success!!')
fileName = 'myDaiary_' + mId + '.txt'
datas = diary.readDiary(uri, fileName)
for d in datas:
print(d, end='')
else:
print('login fail!!')
printMembers()
elif (selectNum == 4):
print('Bye~')
break
# 66강 텍스트 파일에 수입과 지출을 기록하는 가계부를 만들어보자.(모듈x)
import time
limitSpendMoney = 2000
def getTime():
lt = time.localtime()
st = time.strftime('%Y-%m-%d %H:%M:%S')
return st
while True:
selectNumber = int(input('1.입금 \t 2.출금 \t 3.종료 '))
if selectNumber == 1:
money = int(input('입금액 입력: '))
with open('C:/pythonTxt/bank/money.txt', 'r') as f:
m = f.read()
with open('C:/pythonTxt/bank/money.txt', 'w') as f:
f.write(str(int(m) + money))
memo = input('입금 내역 입력: ')
with open('C:/pythonTxt/bank/pocketMoneyRegister.txt', 'a') as f:
f.write('-------------------------------------------\n')
f.write(f'{getTime()} \n')
f.write(f'[입금] {memo} : {str(money)}원 \n')
f.write(f'[잔액] {str(int(m) + money)}원 \n')
print('입금 완료!!')
print(f'기존 잔액 : {m}')
print(f'입금 후 잔액 : {int(m) + money}')
elif selectNumber == 2:
money = int(input('출금액 입력: '))
with open('C:/pythonTxt/bank/money.txt', 'r') as f:
m = f.read()
with open('C:/pythonTxt/bank/money.txt', 'w') as f:
f.write(str(int(m) - money))
memo = input('출금 내역 입력: ')
with open('C:/pythonTxt/bank/pocketMoneyRegister.txt', 'a') as f:
f.write('-------------------------------------------\n')
f.write(f'{getTime()} \n')
f.write(f'[출금] memo : {str(money)}원 \n')
f.write(f'[잔액] {str(int(m) - money)}원 \n')
print('출금 완료!!')
print(f'기존 잔액 : {m}')
print(f'출금 후 잔액 : {int(m) - money}')
elif selectNumber == 3:
print('Bye~')
break
else:
print('잘못 입력하셨습니다.')
# 67강. 사용자가 입력한 숫자의 약수를 텍스트 파일에 기록해보자.
# 약수
inputNumber = int(input("0보다 큰 정수 입력: "))
divisor = []
for number in range(1, (inputNumber + 1)):
if inputNumber % number == 0:
divisor.append(number)
if len(divisor) > 0:
try:
with open('C:/pythonTxt/divisor.txt', 'a') as f:
f.write(f'{inputNumber}의 약수: ')
f.write(f'{divisor}\n')
except Exception as e:
print(e)
else:
print('divisor write complete!')
#소수
inputNumber = int(input("0보다 큰 정수 입력: "))
prime = []
for number in range(2, (inputNumber + 1)):
flag = True
for n in range(2, number):
if number % n == 0:
flag = False
break
if (flag):
prime.append(number)
if len(prime) > 0:
try:
with open('C:/pythonTxt/prime.txt', 'a') as f:
f.write(f'{inputNumber}까지의 소수: ')
f.write(f'{prime}\n')
except Exception as e:
print(e)
else:
print('prime write complete!')
#68강. 두 개의 수를 입력하면 공약수를 텍스트 파일에 작성해보자.
# 수 두개의 공약수
num1 = int(input('1보다 큰 정수 입력: '))
num2 = int(input('1보다 큰 정수 입력: '))
common = []
for i in range(1, (num1 + 1)):
if num1 % i == 0 and num2 % i == 0:
common.append(i)
if len(common) > 0:
try:
with open('C:/pythonTxt/common.txt', 'a') as f:
f.write(f'{num1}와 {num2}의 공약수: ')
f.write(f'{common}\n')
except Exception as e:
print(e)
else:
print('common factor write complete!')
# 수 두개의 최대공약수
num1 = int(input('1보다 큰 정수 입력: '))
num2 = int(input('1보다 큰 정수 입력: '))
maxComNum = 0
for i in range(1, (num1 + 1)):
if num1 % i == 0 and num2 % i == 0:
maxNum = i
try:
with open('C:/pythonTxt/maxComNum.txt', 'a') as f:
f.write(f'{num1}와 {num2}의 최대공약수: {maxNum}\n')
except Exception as e:
print(e)
else:
print('max common factor write complete!')
# 수 세개의 공약수
# num1 = int(input('1보다 큰 정수 입력: '))
# num2 = int(input('1보다 큰 정수 입력: '))
# num3 = int(input('1보다 큰 정수 입력: '))
#
# common = []
# for i in range(1, (num1 + 1)):
# if num1 % i == 0 and num2 % i == 0 and num3 % i == 0:
# common.append(i)
#
# if len(common) > 0:
# try:
# with open('C:/pythonTxt/common.txt', 'a') as f:
# f.write(f'{num1}, {num2}, {num3}의 공약수: ')
# f.write(f'{common}\n')
#
# except Exception as e:
# print(e)
#
# else:
# print('common factor write complete!')
# 수 세개의 최대공약수
# num1 = int(input('1보다 큰 정수 입력: '))
# num2 = int(input('1보다 큰 정수 입력: '))
# num3 = int(input('1보다 큰 정수 입력: '))
# maxComNum = 0
#
# for i in range(1, (num1 + 1)):
# if num1 % i == 0 and num2 % i == 0 and num3 % i == 0:
# maxComNum = i
#
# try:
# with open('C:/pythonTxt/maxComNum.txt', 'a') as f:
# f.write(f'{num1}, {num2}, {num3}의 최대공약수: {maxComNum}\n')
#
# except Exception as e:
# print(e)
#
# else:
# print('max common factor write complete!')
#69강. 섬마을에 과일, 생선, 야채를 판매하는 배가 다음 주기로 입항한다고 할 때, 모든 배가 입항하는 날짜를 텍스트 파일에 기록해보자. (첫 입항일은 2021년 1월 1일 오전 10시로 한다.)
과일 선박 : 3일 주기 / 생선 선박 : 4일 주기 / 야채 선박 : 5일 주기
ship1 = 3; ship2 = 4; ship3 = 5
maxDay = 0
for i in range(1, (ship1 + 1)):
if ship1 % i == 0 and ship2 % i == 0:
maxDay = i
# print('최대공약수: {}'.format(maxDay))
minDay = (ship1 * ship2) // maxDay
# print('{}, {}의 최소공배수: {}'.format(ship1, ship2, minDay))
newDay = minDay
for i in range(1, (newDay + 1)):
if newDay % i == 0 and ship3 % i == 0:
maxDay = i
# print('최대공약수: {}'.format(maxDay))
minDay = (newDay * ship3) // maxDay
# print('{}, {}, {}의 최소공배수: {}'.format(ship1, ship2, ship3, minDay))
# print('{}일마다 모든 선박이 입항합니다.'.format(minDay))
from datetime import datetime
from datetime import timedelta
n = 1
baseTime = datetime(2021, 1, 1, 10, 0, 0)
# baseTime = datetime.now()
# print(f'2021년 모든 선박 입항일: {baseTime}')
with open('C:/pythonTxt/arrive.txt', 'a') as f:
f.write(f'2021년 모든 선박 입항일\n')
f.write(f'{baseTime}\n')
nextTime = baseTime + timedelta(days=minDay)
while True:
# print(f'2021년 모든 선박 입항일: {nextTime}')
with open('C:/pythonTxt/arrive.txt', 'a') as f:
f.write(f'{nextTime}\n')
nextTime = nextTime + timedelta(days=minDay)
if nextTime.year > 2021:
break
※ 이 게시물은 제로베이스 취업 스쿨 강의를 참고하여 작성된 스터디 노트입니다.