개발자 미니민의 개발스터디

[파이썬] 파일 처리

by mini_min
[파이썬] 파일 처리

🖋️ 파일 처리

: 텍스트 파일 저장을 위해 pathname 이 필요하다. 

open() 의 경우 파일을 쓰기 용도로 open 한다. 파일이 없으면 만들고, 있으면 지우고 다시 만든다.

mode = "w" 는 쓰기 모드, mpde = "r" 는 읽기 모드이다. 인코딩도 같이 해준다.

# 텍스트 파일 저장 

pathname = 'C:/source/data/test.txt'

# 파일을 쓰기 용도로 open 
#  파일이 없으면 만들고, 있으면 지우고 다시 만든다.
f = open(pathname, mode="w", encoding="utf-8")

for i in range(1, 21):
    data = "%d 라인 내용입니다... \n" % i
    f.write(data) #파일에 저장
f.close() # 파일은 사용 후 반드시 close() 해야한다.

print("파일 저장 완료")

 

: 파일은 사용 후 반드시 close() 해줘야한다.

# 텍스트 파일 저장 

pathname = 'C:/source/data/test.txt'

try:
    # 파일을 쓰기 용도로 open 
    f = open(pathname, mode="w", encoding="utf-8")

    for i in range(1, 26):
        data = "%d 라인 내용입니다... \n" % i
        f.write(data) #파일에 저장
finally:
    f.close() # 파일은 사용 후 반드시 close() 해야한다.

print("파일 저장 완료")

 

: open 이 아니라 with 구문으로 파일 처리하면, 파일은 자동으로 close() 해준다. 

# 텍스트 파일 저장 

pathname = 'C:/source/data/test.txt'

# with 구문을 벗어나면 파일은 자동으로 close() 됨
with open(pathname, mode="w", encoding="utf-8") as f :
    for i in range(1, 21):
        data = "%d 라인 내용입니다... \n" % i
        f.write(data) #파일에 저장


print("파일 저장 완료")

 

: 텍스트 파일 저장에서 엔터를 누르면 저장완료 메시지가 출력되고 종료된다.

# 텍스트 파일 저장 : 키보드로 입력한 문자열을 test2.txt로 저장하는 프로그램
# 아무것도 입력하지 않고 엔터를 누르면 "저장완료..."메시지 출력후 종료

pathname = 'C:/source/data/test2.txt'
with open(pathname, mode="w", encoding="utf-8") as f :
    while True:
        data = input("문자열[빈문자열 엔터:종료]?")
        if not data:break
        f.write(data+"\n")

print("파일 저장 완료")

 

 

🖋️ 파일 읽기 

: 읽을 파일이 없으면 예외가 발생한다.

readline() 은 파일의 한 줄을 읽어서 문자열로 반환한다.

# 텍스트 파일 열기
# 파일이 없으면 FileNotFoundError 예외 발생! 
# readline() : 파일의 한 줄을 읽어서 문자열로 반환
pathname = 'C:/source/data/test.txt'
with open(pathname, mode="r", encoding="utf-8") as f :
    while True:
        data = f.readline() # 각줄의 마지막에 \n이 포함되어있음
        if not data:break
        print(data, end='')

print()

 

: readlines() 는 파일의 모든 줄을 읽어서 list 로 반환한다.

print(lines) 하게 되는 경우 각 줄 마지막에 \n이 있다.

# 텍스트 파일 열기
# 파일이 없으면 FileNotFoundError 예외 발생! 
# readlines() : 파일의 모든 줄을 읽어서 list로 반환
pathname = 'C:/source/data/test.txt'
with open(pathname, mode="r", encoding="utf-8") as f :
    lines = f.readlines()
    
#print(lines) # 각줄 마지막에 \n이 있음 
for line in lines:
    print(line, end='')

 

: read(size) 는 읽을 문자의 수이다. 생략시 파일의 모든 내용을 읽어 문자열로 반환한다.

# 텍스트 파일 열기
# 파일이 없으면 FileNotFoundError 예외 발생! 
# read(size) : size를 생략하면 파일의 내용 전체를 읽어 문자열로 반환
#   size : 읽을 문자 수

pathname = 'C:/source/data/test.txt'
with open(pathname, mode="r", encoding="utf-8") as f :
    data = f.read()
    print(data)

 

: 파일 객체를 for 문과 함께 사용하면 파일을 줄 단위로 읽는다.

# 텍스트 파일 열기
# 파일이 없으면 FileNotFoundError 예외 발생! 
# 파일 객체를 for문과 함께 사용하면 파일을 줄단위로 읽는다.

pathname = 'C:/source/data/test.txt'
with open(pathname, mode="r", encoding="utf-8") as f :
    for s in f: # 마지막에 \n이 포함되어 있음
        print(s, end='')

 

: 텍스트 파일 추가 : 없으면 만들고, 있으면 추가한다. 

# 텍스트 파일 추가 : 없으면 만들고, 있으면 추가

pathname = 'C:/source/data/test.txt'

# with 구문을 벗어나면 파일은 자동으로 close() 됨
with open(pathname, mode="a", encoding="utf-8") as f :
    for i in range(26, 51):
        data = "%d 라인 내용입니다... \n" % i
        f.write(data) 

print("파일 저장 완료")

 

: 파일을 읽어 과목 평균과 점수로 pass 파일 만들기 

for 문으로 읽어서 line 을 나누고, 나눈 라인의 값을 int 로 변환해서 계산 작업한다. 

#score.txt 파일을 읽어 모든 과목이 40점 이상 평균 60점 이상인 사람만
#   pass.txt 에 저장하기 
#   학번, 이름, 국, 영, 수, 총점, 평균 형식으로 저장
# 1001,홍길동,80,80,80,
pathname1 = 'C:/source/data/score.txt'
pathname2 = 'C:/source/data/pass.txt'

try:
    f1 = open(pathname1, mode="r", encoding="utf-8")
    f2 = open(pathname2, mode="w", encoding="utf-8")
    
    for line in f1:
        line = line.replace("\n", "")
        datas = line.split(",")
        ss = [int(datas[i]) for i in range(2,5)]
        tot = sum(ss)
        ave = tot // 3
        result = ",".join(s for s in datas)
        result += "," + str(tot) + "," + str(ave)
        if ss[0] >= 40 and ss[1]>=40 and ss[2]>=40 and ave>=60:
            f2.write(result+"\n")
finally:
    f1.close()
    f2.close()
print("생성완료")

 

🖋️ 작업 경로, 폴더 만들기, 제거하기 

import os

# 현재 작업 경로 확인
s = os.getcwd()
print("작업경로: ", s)

#경로 변경
os.chdir(r"C:\source\data")
s = os.getcwd()
print("작업경로: ", s)

#폴더만들기
#os.mkdir("C:/source/data/ex")

#폴더 제거
os.rmdir("C:/source/data/ex")

os.system("dir")

 

: 확장자로 파일 가져오기, 전체 파일 목록 가져오기 등

import os
import glob

# 전체 파일 목록(폴더, 파일명만(경로 미포함) 가져옴)
path = "./data"

file_list = os.listdir(path)
print(file_list)

# 확장자가 txt인 파일 가져오기
file_list_txt = [file for file in file_list if file.endswith(".txt")]
print(file_list_txt)

path = "C:\source\ch01\*"
#path = "./ch01/*"
file_list = glob.glob(path)
print(file_list)

 

: 파일 복사, 파일 이동, 파일 삭제

import os
import shutil

# 파일 복사
shutil.copy("C:/source/data/score.csv", "C:/source/data/s.csv")

# 파일 이동
shutil.move("C:/source/data/s.csv", "C:/source/s.csv")

# 파일 삭제
path = "C:/source/s.csv"
if os.path.exists(path):
    os.remove(path)
    print("파일 삭제 완료")
else:
    print("not exist")
    
# 파일 삭제2
os.unlink("C:/source/data/test.txt")

 

: csv 파일을 읽어올 수 있다. reader() 를 사용하면

import csv

pathname = "C:/source/data/score.csv"

f = open(pathname, "r", encoding="utf-8")

rd = csv.reader(f)
for rec in rd:
    print(rec) # 타입 : <class 'list'>

f.close()

 

: csv 형 리스트 만들기는 reader 로 읽어서 for 문으로 리스트에 append 해준다.

import csv

# csv 형 리스트 만들기 : [[1행], [2행]...]
pathname = "C:/source/data/score.csv"
output = []
with open(pathname, "r", encoding="utf-8") as f:
    rd = csv.reader(f)
    for rec in rd:
        output.append(rec)

print(output)

 

: csv 파일 작성은 writer 를 사용한다. 

import csv

pathname = "C:/source/data/score.csv"
a = [['학번','이름','국어','영어','수학'],
     ['1001','김자바',80,90,80],
     ['1002','오자바',70,60,50],
     ['1003','이자바',60,80,75]
     ]
with open(pathname, "w", newline='', encoding="utf-8") as f:
    obj = csv.writer(f, delimiter=",") # 구분자 ,는 생략 가능
    obj.writerows(a)
    
print('csv 파일 생성 완료 ')

 

: usecsv.py 만들기

import csv

# csv 파일 열기
def readcsv(pathname):
    output = []
    
    try:
        f = open(pathname, mode="r", encoding="utf-8")
        rd = csv.reader(f)
        for rec in rd:
            output.append(rec)
    except FileNotFoundError:
        raise FileNotFoundError("[" + pathname + "] 파일이 존재하지 않습니다.")
    except Exception as err:
        raise Exception(err)
    finally:
        try:
            f.close()
        except:
            pass            
    return output


# csv 파일 저장하기 
def writecsv(pathname, the_list):
    with open(pathname, mode="w", newline="", encoding="utf-8") as f:
        obj = csv.writer(f, delimiter=",")
        obj.writerows(the_list)
import usecsv

try:
    pathname= "C:/source/data/score.csv"
    score_list = usecsv.readcsv(pathname)
    print(score_list)
except Exception as err:
    print(err)

 

 

 

'Python' 카테고리의 다른 글

[파이썬] JSON  (0) 2022.12.25
[파이썬] 정규식  (0) 2022.12.25
[파이썬] 예외  (0) 2022.12.25
[파이썬] 모듈  (0) 2022.12.25
[파이썬] 클래스 다중상속, 추상 메서드  (1) 2022.12.25

블로그의 정보

개발자 미니민의 개발로그

mini_min

활동하기