본문 바로가기
코딩 연습/코딩배우기

[python] 파이썬 파일 쓰기, 읽기 - open(), read(), readline(), readlines()

by good4me 2020. 9. 11.

goodthings4me.tistory.com

 

■ 파이썬 내장함수인 open()으로 파일 객체를 얻어서 파일을 생성하거나 쓰고, 읽을 수 있다. 

str1 = 'G2Bgo는 나라장터, 관공서입찰, 공공기관입찰, \
군부대입찰 등의 경쟁입찰 건들에 대해 AI 분석을 통한 예정가격과 \
낙찰률을 계산하며, 각 입찰공고 건에 대해 투찰을 할 수 있도록 \
입찰금액을 제공해주는 입찰정보사이트입니다.'

# 파일 쓰기
f = open('./g2bgo.txt', 'w')  # 파일 객체 얻기
f.write(str1)
f.close()

# f는 <_io.TextIOWrapper name='./g2bgo.txt' mode='w' encoding='cp949'>
# 파일 생성 'w' 모드는 기존 파일을 덮어쓴다.
# (기존 파일 삭제 후 다시 생성 - 사용 시 주의 필요!!)


# 파일객체 반복자(iterator)에 대해 for문으로 읽기
f = open('./g2bgo.txt')
for line in f:
    print(line, end='') # 출력 시 '\n' 포함된 것 제거 위해 end='' 사용
    

# 파일 읽기
f = open('g2bgo.txt', 'r')  # 'r' 생략 가능(파일읽기)
rs1 = f.read()  # 파일 전체 내용 읽기
print(rs1)

[출력 결과] G2Bgo는 나라장터, 관공서입찰, 공공기관입찰, 군부대입찰 등의 경쟁입찰 건들에 대해 AI 분석을 통한 예정가격과 낙찰률을 계산하며, 각 입찰공고 건에 대해 투찰을 할 수 있도록 입찰금액을 제공해주는 입찰정보사이트입니다.

good4me.co.kr

 

■ 라인 단위 읽기 테스트(파일 읽기 함수인 readline(), readlines() 사용)

# readline() : 한 번에 한 줄씩 읽기, while문과 함께 사용
# readlines() : 전체 내용을 라인 단위로 읽어 리스트에 저장

str2 = '''박달초 다목적체육관 증축공사
관양중 다목적체육관 증축공사
일산근린공원 조성공사
대일초 다목적체육관 증축공사
영화초등학교 다목적강당 보수공사
친환경 농업미생물센터 신축공사(건축, 토목)
석수체육공원 배드민턴장 건립공사
외동중학교 외벽개선 및 기타공사 전자입찰 공고
당진영덕선 문의(영덕)휴게소 신축 전기공사
당진영덕선 문의(청주)휴게소 신축 전기공사
손불지구 어촌뉴딜300사업 복합커뮤니티센터 신축공사
2020년 부산 신항 감천항 건축시설물 유지보수공사
스포원 실내체육관 옥상 방수공사
순지선 농어촌도로(리도202호선) 확포장사업
남부내수면 양어용수 방사상집수정 설치 공사
횡성 농민문화체육센터 리모델링사업(건축)(긴급)
동율공동체 다목적 힐링공간 조성사업 건축공사(민간대행)
중산관광지 활성화(지리산두류 생태탐방로조성) 사업(총괄분)
영동선 법전-춘양간 법전터널 보강기타공사
수덕초등학교 다목적강당 증축공사
인천모래내전통시장 공중화장실 신축공사(건축,토목,기계)
석계초등학교 특별교실 증축 및 기타공사 전자입찰 공고
목포시립도서관 리모델링 공사(건축)
공주시 소공인복합지원센터 구축사업 수선공사 입찰공고(긴급)
영동선 승부-석포간 굴현터널 보강기타공사
녹전초등학교 소규모 옥외체육관 증축공사
신성초등학교 소규모 옥외체육관 증축공사(긴급)
소방차량 매연배출시스템 설치 공사'''


with open('./bidding.txt', 'w') as f:  # with 이용한 파일객체 얻기
    f.write(str2)


f = open('./bidding.txt')  # 2번째 인자 'r' 생략
line = f.readline()
while line:  # line = '' 이면 끝
    print(line, end='')  # readline() 시 '\n'이 포함되어 있음
    line = f.readline()



f = open('./bidding.txt')
for line in f.readlines():  # 리스트를 읽어서 출력
    print(line, end='')



# 라인 수 알아보기
f = open('./bidding.txt')
print(len(f.readlines()))  # 28


# 문자 수 알아보기
f = open('./bidding.txt')
print(len(f.read()))  # 655


# 파일 크기 알아보기
import os
s = os.path.getsize('./bidding.txt')
print(s)  # 1187

 

■ 리스트(List)를 파일로 쓰고 읽기 테스트

lst = ['입찰공고', '입찰분석', '예정가격', '입찰금액', '입찰참여', '입찰낙찰', '입찰결과']

# 리스트 쓰기
with open('./bid.txt', 'w') as f:
    f.writelines(lst)


# 리스트 읽기
with open('./bid.txt') as f:
    print(f.read())

# 출력 결과 : 입찰공고입찰분석예정가격입찰금액입찰참여입찰낙찰입찰결과


# 파일 쓸 때 개행문자 넣기
with open('./bid2.txt', 'w') as f:
    f.writelines('\n'.join(lst))  # 리스트 요소에 '\n' 추가하여 쓰기

# 파일 읽기
with open('./bid2.txt') as f:
    print(f.read())

# 출력 결과
'''
입찰공고
입찰분석
예정가격
입찰금액
입찰참여
입찰낙찰
입찰결과
'''



# 파일 객체 주요 메서드 & 속성 알아보기
fp = open('./bid.txt')

print(fp.closed) # False, 파일 닫혔는지 여부 
print(fp.encoding) # cp949, 인코딩 방식 반환
print(fp.mode) # r, 파일 객체의 모드
print(fp.name) # ./bid.txt, 파일객체 파일명
print(fp.readable()) # True, 파일 객체 읽기 가능한지
print(fp.seekable()) # True, 파일 포인터 위치 지정 가능한지
print(fp.tell())  # 0, 현재 파일 포인터 위치 
print(fp.writable()) # False 파일 객체에 쓰지 가능한지
print(fp.newlines) # None, 파일의 라인 개행 출력
print(fp.read(4)) # 입찰공고, 입력한 숫자만큼 읽기, 없으면 전체 읽기

 

댓글