본문 바로가기

Python

15. 파일 입출력

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