파이썬에서 파일을 읽고 쓰는 방법을 알아보겠습니다.

파일을 읽기 및 쓰기위한 모드로는 아래와 같습니다.

읽기모드 - r, 쓰기모드 - w, 추가모드 - a, 텍스트모드 - t, 바이너리모드 - b

 

01. 파일 쓰기(Write)

읽기와 마찬가지로 파일을 생성할때도 open 함수를 사용합니다.

open() 함수를 사용하여 text1.txt 파일을 생성해 보겠습니다.

with open('./resource/text1', 'w') as f:
    f.write('I love python\n')

생성된 text1 파일을 확인해 보면 'I love python' 이 추가된 것을 알 수 있습니다.

생성된 text1 파일에 하나의 문장을 더 추가해 보겠습니다.

이때는 w 대신 a를 사용해야 합니다.

with open('./resource/text1', 'a') as f:
    f.write('I love programming\n')

이번에는 리스트를 파일로 생성해 보겠습니다.

이때는 write가 아닌 writelines를 사용해야 합니다.

with open('./resource/text2', 'w') as f:
    list = ['Korea\n', 'Canada\n', 'USA\n']
    f.writelines(list)

※ print() 문을 사용하여 파일 쓰기

with open('./resource/text3', 'w') as f:
    print('Korea!', file=f)
    print('Canada!', file=f)
    print('USA!', file=f)

 

02. 파일 읽기(Read)

우선 임의의 경로에 txt 파일을 생성합니다.

경로 : ./resource/text.txt

Python is a programming language that lets you work more quickly 
and integrate your systems more effectively.
You can learn to use Python and see almost immediate gains in productivity 
and lower maintenance costs.

생성한 txt 파일 읽어오겠습니다.

주의해야할 점은 open 함수를 사용했기때문에 반드시 마지막에 close()를 해주어야 합니다.

f = open('./resource/text.txt', 'r', encoding='utf-8')
# f = open('경로' , '모드' , 인코딩 - 생략하면 기본적으로 utf - 8)

cts = f.read()
print(cts)
f.close()

 

※ 인코딩, 파일 이름, 모드 확인 코드

# 인코딩 확인
print(f.encoding)

# 파일 이름
print(f.name)

# 모드 확인
print(f.mode)

>> result
utf-8
./resource/text.txt
r

 

위에 예시를 with ~ as 문을 사용하여 다시 알아보겠습니다.

with ~ as 문을 사용하면 내부적으로 코드에서 close를 실행하기 때문에 직접 close를 적는 번거로움을 덜을수 있습니다.

with open('./resource/text.txt', 'r', encoding='utf-8') as f:
    c = f.read()
    print(c)

 

txt 파일의 전체 문장 중 원하는 부분을 지정해서 출력하는 방법을 알아보겠습니다.

with open('./resource/text.txt', 'r', encoding='utf-8') as f:
    c = f.read(20)
    print(c)
    
>> result
Python is a programm

# 다음 20Byte 마지막 읽은 위치를 기억하는 것
    c = f.read(20) 
    print(c)
>> result
ing language that le

# 처음으로 돌아가서 다시 20 byte 출력
    f.seek(0,0) 
    c= f.read(20)
    print(c)
>> result
Python is a programm

# 한줄씩 출력 - readline()
    line = f.readline()
    print(line)
>> result
Python is a programming language that lets you work more quickly

# 전체를 읽은 후 라인 단위 리스트로 저장 - readlines()
    cts = f.readlines()
    print(cts)
    print()
# 저장된 리스트를 원문 형식으로 출력
    for c in cts:
        print(c, end='')
>> result
['Python is a programming language that lets you work more quickly\n', 'and integrate your systems more effectively.\n', 'You can learn to use Python and see almost immediate gains in productivity\n', 'and lower maintenance costs.\n']

Python is a programming language that lets you work more quickly
and integrate your systems more effectively.
You can learn to use Python and see almost immediate gains in productivity
and lower maintenance costs.

 

03. csv 파일 쓰기

writer() 함수를 사용하여 csv 파일을 생성해 보겠습니다.

우선 csv 파일을 쓰기 위해서 csv를 import 하겠습니다.

import csv

리스트를 선언한 후 writer() 함수를 사용하여 csv 파일을 생성하겠습니다.

w = [[1,2,3],[4,5,6],[7,8,9],[10,11,12],[13,14,15],[16,17,18],[19,20,21]]

with open('./resource/csv_write.csv', 'w', encoding='utf-8') as f:
    wt = csv.writer(f)
    for v in w:
        wt.writerow(v)

 

04. csv 파일 읽기

콤마로 구분된 csv 파일을 reader() 함수를 사용하여 읽어오겠습니다.

with open('./resource/test1.csv', 'r') as f:
    reader = csv.reader(f)
    
    # Header를 건너뛰고 내용 출력
    next(reader)
    
    for c in reader:
        print(c)

리스트로 결과가 출력됩니다.

 

위 내용을 원하는 구분 기호로 출력을 원한다면 join(c) 를 사용하면 됩니다.

print(' : '.join(c))

 

구부 기호로 표시된 csv 파일을 읽어올때는 구분자를 지정해주어야 합니다.

예를 들어 | 로 구분된 csv 파일이 있다고 가정하면 delimiter를 사용하여 구분자를 지정해야 합니다.

with open('./resource/test2.csv', 'r') as f:
    reader = csv.reader(f, delimiter='|') # 구분자 지정

    for c in reader:
        print(c)

 

딕셔너리로 출력하고 싶을때는 아래와 같이 사용하면 됩니다.

# 예제1
with open('./resource/test1.csv', 'r') as f:
    reader = csv.DictReader(f)
    for c in reader:
        print(c)
        
>> result
OrderedDict([('Name', 'Afghanistan'), ('Code', 'AF')])
OrderedDict([('Name', 'Åland Islands'), ('Code', 'AX')])


# 예제2
with open('./resource/test1.csv', 'r') as f:
    reader = csv.DictReader(f)

    for c in reader:
        for k,v in c.items():
            print(k,v)
        print('---------------------')
        
>> result
Name Afghanistan
Code AF
---------------------
Name Åland Islands
Code AX
---------------------

'Language > Python' 카테고리의 다른 글

20. python - 예외처리  (0) 2020.01.02
19. python - package  (0) 2019.12.27
18. python - module  (0) 2019.12.26
17. python - class  (0) 2019.12.24
16. python - input()  (0) 2019.12.21

+ Recent posts