1. 파일 읽기/쓰기/추가하기
'''
# 파일(*.txt) 읽기/쓰기/추가하기
-1) open() 함수만 사용하는 경우
: 주의사항 : close()를 이용해서 파일닫기 필요
파일변수 = open(파일경로, 모드(r, w, a), encoding=인코딩옵션)
명령문 ~
파일변수.close
-2) with + open() 함수
: close() X
with open(파일경로, 모드(r, w, a), encoding=인코딩옵션) as 파일변수:
명령어 ~
'''
'''
# 경로 확인
import os #(os는 표준모듈로써 탐색기 제공하는 모듈)
# print(dir(os)) # os 모듈에서 제공하는 함수 확인
print()
print(os.getcwd()) # 현재 작업중인 파이썬 파일의 경로 확인
# C:\pyclass
# 파일 쓰기
# 파일변수 = open(파일경로, 'w', encoding='utf-8|cp949)
# 결과는 파이썬 실행후 output 폴더위치로 이동후 확인
# 파일변수.write(문자열데이터) : 파이썬 데이터 => 파일쓰기
file = open('output/test1.txt' , 'w' )
file.write('Hello world!!! \n\n')
# 1~10까지 데이터 쓰기
for i in range (1,11):
file.write(i)
print(i, end = ' ')
file.close()
#TypeError: write() argument must be str, not int
오류 없으려면
file = open('output/test1.txt' , 'w', encoding='utf-8' )
file.write('Hello world!!! \n\n')
for i in range (1,11):
file.write(str(i)+' ')
print(i, end = ' ')
file.write('\n\n 파일 쓰기가 종료되었습니다.')
file.close()
'''
2. 기존 파일에 내용 추가하기
# 기존 파일에 내용 추가하기
# 파일변수 = open(파일경로, 'a', encoding='utf-8|cp949)
file = open('output/test1.txt' , 'w', encoding='utf-8' ) # 파일 덮어쓰기
file.write('테스트 중...')
# output/test1.txt 에 '테스트 중...' 입력되고 기존 내용 삭제
# 파일이 없다면 새로 생성, 파일이 있다면 데이터 추가
file = open('output/test1.txt' , 'a', encoding='utf-8' ) # 파일 덮어쓰기
file.write('테스트 중...')
file.close()
#결과
#테스트 중...테스트 중...
# Quiz
# 구구단 결과를 gugu.txt 파일 쓰기
def write_gugudan(url, n):
# 파일 변수 쓰기 모드로 생성
file = open( url, 'w', encoding='utf-8' )
# 단 쓰기
file.write(f'*** {n}단 *** \n\n')
# for 문을 이용한 구구단 계산 결과 쓰기
for i in range(1,10):
file.write( f'{n}X{i} = {n*i} \n')
print(f' {n} 단 파일 쓰기가 완료되었습니다.')
file.close()
write_gugudan('output/3단.txt', 3)
write_gugudan('output/13단.txt', 13)
3. 파일 읽기
'''
# 파일 읽기
# 파일변수 = open(파일경로, 'r', encoding='utf-8|cp949)
# - 파일변수.read() : 파일 데이터 전체 => 파이썬의 문자열 데이터
# - 파일변수.readline() : 파일 데이터중 한 행 => 파이썬의 문자열 데이터
# - 파일변수.readlines() : 파일 데이터 전체 => 파이썬의 리스트
# 파일변수.close()
# 데이터 파일 경로 : data/Yesterday.txt
'''
'''
file = open('data/Yesterday.txt','r')
print(file.read()) # 문서 전체 출력
print('-'*40)
print(file.readline()) # 한 행만 출력 (#앞에 read가 있으면 뒤에 readline 했을때 앞 내용 휘발됨.)
print('-'*40)
print(file.readlines()) # '\n' 기준으로 한 행씩 리스트의 데이터로 변경
file.close()
# 파일의 데이터 => 파이썬 데이터 변수
print('-'*40)
file = open('data/Yesterday.txt','r')
data = file.read()
# 특정 문자열 부분만 출력
start_idx = 0
end_idx = data.find('away')+len('away')
print(data[start_idx:end_idx])
# 공백을 기준으로 문자열 분리 후 리스트로 변경
data_list1 = data.split() # 공백 기준
print(data_list1)
print('-'*40)
# 줄바꿈 문자(\n) 기준으로 문자열 분리 후 리스트로 변경
data_list2 = data.splitlines()
print(data_list2)
file.close()
print('\n'*10)
#data/coding.txt' 문서를 읽고 코딩이라는 단어가 들어간 어구를 리스트화 한 후 총
# 갯수를 출력하는 함수를 코딩하여라.
# fileread('data/coding.txt', 'utf-8’) 함수 호출
#1) 함수 정의 : 매개변수(파일경로, 인코딩옵션값)
def fileread( url, op, word):
#2) 파일읽기 변수 지정
file = open('data/coding.txt','r', encoding=op)
#3) 파일 전체를 공백을 기준으로 리스트로 변경
data = file.read()
data_list = data.split()
# print(data_list)
#4) 빈 리스트를 생성 후 특정 단어가 들어간 데이터만 추출
result_list = []
for data in data_list :
if word in data :
result_list.append(data)
#5) 출력
print(f' 파일명 : {url}')
print()
print(f' {word} 이라는 글자가 들어간 어구 출력')
print(': ' , result_list)
print()
print('총 갯수는?' , len(result_list))
4. 함수호출
# 함수 호출
fileread('data/coding.txt', 'utf-8', '코딩')
'''
'''
# with 문을 이용한 파일 입출력
with open(파일경로, 모드(r, w, a), encoding=인코딩옵션) as 파일변수 :
명령어~
'''
print('-'*40)
# with open() : 파일 읽기
with open('data/Yesterday.txt','r') as file:
while True:
row = file.readline()
if row:
print(row)
print('-'*20)
else:
break
print('파일 읽기가 종료되었습니다.')
print('\n'*20)
# with open() : 파이썬의 리스트 데이터 => 파일 쓰기
mylist = [ 'apart', 34, True, False, 'banana', 3.14]
with open('output/datalist.txt', 'w', encoding='utf-8') as file:
for item in mylist:
# 리스트명.index(데이터) => 데이터의 위치인덱스 반환
file.write(f'{mylist.index(item)} : {item} \n')
print('파일 쓰기가 완료되었습니다.')
# Quiz
#1) 함수 정의 = 매개변수(단어의수, 파일경로, 인코딩옵션값)
def inputWriteFile( n, url, op ):
#2) 빈리스트 생성 후 단어를 n번 만큼
word_list = []
for i in range(n):
word = input('단어를 입력하세요 ...').strip()
word_list.append(word)
#3) 리스트 출력
print(f' 입력된 단어 리스트는 {word_list} 입니다.')
#4) 파일쓰기
with open(url, 'w', encoding=op) as file:
for item in word_list:
# 리스트명.index(데이터) => 데이터의 위치인덱스 반환
file.write(f'{word_list.index(item)} : {item} \n')
print(f'{n}개의 단어가 모두 저장되었습니다. \n\n')
#5) 함수 호출 테스트
inputWriteFile(3, 'output/output1.txt', 'utf-8')
inputWriteFile(5, 'output/output2.txt', 'utf-8')
Quiz1) readlines()를 이용하여 문서에서 특정 행부터 행까지를 출력하도록 함수 정의하고
출력하도록 코딩하여라
Quiz2)
#1 함수 정의
def readFirstLines(url, op, row1, row2):
#2 파일 읽기 : 행단위로 리스트로 생성
with open(url, 'r', encoding=op) as file:
data_list = file.readlines()
#3) 빈행('\')를 제외하는 새로운 리스트 생성
result_list = []
for data in data_list:
if data != '\n':
result_list.append(data)
#4) 출력
for data in result_list[row1-1:row2]:
print(f'{result_list.index(data)+1}행 : {data}')
#5) 함수 호출 테스트
readFirstLines('data/color.txt', 'utf-8', 13, 15)
readFirstLines('data/Yesterday.txt', 'cp949', 8, 12)
'''
13행 : ORANGE를 좋아하는 사람
14행 : * 심성이 착하고, 다른 사람들과 함께 있기를 좋아하고, 귀가 엷고 충성심이 강하며 솔선 수범형.
15행 : * 인정이 많다. 유쾌한 성격.
--------------------------------------------------
8행 : Oh, yesterday came suddenly
9행 : Why she had to go,
10행 : I don't know She wouldn't say
11행 : I said something wrong
12행 : Now I long for yesterday
'''
'Python' 카테고리의 다른 글
17. 클래스와 상속 (8) | 2024.10.11 |
---|---|
16. CSV (0) | 2024.10.11 |
14. 예외처리 (0) | 2024.10.11 |
13. 모듈 사용하기(math 모듈, random 모듈) (4) | 2024.10.08 |
12. 함수( 반환값, 매개변수, 람다함수, filter(), map()) (3) | 2024.10.08 |