본문 바로가기

코딩

[Python] 파일 다루기 (txt, csv, with문, json)

1. txt 파일 다루기

내용 코드
파일 열기
*인코딩은 생략 가능
f = open("파일명", encoding="인코딩방법")
특정 모드로 파일 열기 f = open("파일명", "모드")
*읽기:"r", 쓰기:"w", 쓰기&내용 추가:"a",
*읽기&쓰기(기존 파일 내용 유지):"r+",
모두 읽어서 출력 print(f.read())
처음 #개 문자만 읽어 출력 print(f.read(#))
현재 위치에서 한 줄을 읽어 출력
*'/n'도 함께 가져오므로  strup메서드와 함께 사용 추천
print(f.readline())
현재 위치에서 모든 줄을 리스트로 읽어 출력 print(f.readlines())
내용 쓰기 f.write("내용")
리스트에 있는 내용 쓰기 f.writelines(리스트)
모두 읽어서 상수에 내용 저장 content = f.read()
상수에서 내용 수정 content = content.replace("변경 전 문자", "변경 후 문자")
상수 내용을 파일에 쓰기 f.write(content)
내용을 현재 커서 위치까지 잘라냄 f.truncate()
내용을 뒷 부분 # byte 빼고 잘라냄 f.truncate(#)
커서 위치 확인해 출력 print(f.tell())
커서 위치를 #번 위치로 이동시키기
*처음은 0
f.seek(#)
커서 위치를 현재 위치 기준으로 이동시키기
*음수면 앞으로, 양수면 뒤로 
f.seek(f.tell() + 숫자)
파일 닫기 f.close()

 

*read, write 메서드를 사용하면 마지막으로 읽은/쓴 위치로 커서가 이동함. (파일의 시작 커서 위치 : 0)

*open 메서드를 사용했으면 작업 후 필수로 꼭 close 메서드 사용해야 함.

 

 

2. with문

상술한 바와 같이 open메서드 사용 시, 작업이 끝나면 꼭 close 메서드를 사용해야 한다.

하지만 with문을 사용하면 close 메소드 없이, with문에 속하는 작업들이 끝나면 자동으로 파일이 닫힌다.

with문의 형식은 아래와 같다.

#파일 1개일 경우
with open("파일명") as f:
    작업 내용들

#파일 2개 이상일 경우
with (open("파일명1") as f1, open ("파일명2") as f2):
    작업 내용들

 

 

3. CSV 파일 다루기

.csv 파일을 다루는 방법은 2가지가 있다.

① 내장 함수 csv 이용

② 외장 함수 pandas 이용

 

우선 아래는 내장 함수 csv를 이용하는 방법이다.

내용 코드
파일 열기
*newline="" 권장
f = open("파일명", newline="")
모두 읽어서 상수에 내용 저장 a = csv.writer(f)
상수에 리스트에 있는 내용 추가 (시퀀스를 한 줄로) a.writerow(리스트명)
상수에 리스트에 있는 내용 추가 (2차원 시퀀스를 여 줄로) a.writerows(리스트명)
f의 각 줄을 순차적으로 반환하는 이터레이 b = csv.reader(f)
f 내용 한 줄씩 추출 for x in b:
    print(row)
f 내용 리스트로 추출 list(b)

 

아래는 외장 함수 pandas를 이용하는 방법이다. (import pandas as pd 를 한 상태)

내용 코드
csv 파일을 읽어 DataFrame 만들기 df = pd.read_csv("파일명")
딕셔너리를 DataFrame으로 만들기 df = pd.DataFrame(딕셔너리명)
데이터를 직접 넣어 DataFrame 만들기 df = pd.DataFrame([1,3,5], [2,12,24])   #(row1, row2)
DataFrame을 csv 파일로 저장하기
*index = False 하면 인덱스는 추가 안 됨
df.to_csv("파일명")
DataFrame 위부터 #줄 자료 읽어 출력하기 print(df.head(#))
DataFrame 아래부터 #줄 자료 읽어 출력하기 print(df.tail(#))

 

 

4. json

(import json 을 한 상태)

내용 코드
JSON 파일 열기 with open("파일명") as f:
JSON 파일을 Python 객체에 저장 a = json.load(f)
JSON 파일의 문자열을 Python 객체에 저장 a = json.loads(json문자열)
Python 객체를 JSON으로 변환하여 파일에 쓰기
*indent는 들여쓰기 칸 수
json.dump(a, f, indent=숫자)
Python 객체를 JSON 문자열로 변환
*indent는 들여쓰기 칸 수
json.dumps(a, indent=숫자)

 

한글을 지키면서 json파일을 여는 법은 아래와 같다.

import json

with open("first.json", "r") as f1:    #first 파일을 읽기 모드로 엶
    object = json.load(f1)    #first 파일 내용을 python 객체에 저장
    with open("second.json", "w") as f2:    #second 파일을 쓰기 모드로 엶
        json.dump(object, f2, ensure_ascii=False)
        #second 파일에 first 파일 내용을 넣는데, ASCII에서 표현 못하는 문자(한글)를 그대로 출력

#잘 작성되었는지 열어서 확인
with open("second.json", "r") as f:
    print(json.load(f))