반응형
Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

CDW (Coding Discussion World)

python(old) - open (파일 읽고, 쓰기) 본문

Python/Study

python(old) - open (파일 읽고, 쓰기)

pymin 2022. 6. 12. 08:37
반응형

이번에는 파일 읽고, 쓰기를 해보고자 한다.

 

open으로 바로 접근하는 방법이 있고, with을 사용해서 접근하는 방법이 있다. 어떤 것을 써도 상관은 없지만 with을 쓰지 않으면 마지막에 close()를 해줘야 한다.

 

우선, 파일 읽기다 ('r' 사용)

### with 사용
with open(os.getcwd() + '/test.txt', 'r') as f:
    a = f.readlines()
    print(f'a = {a}')
    
### with 미사용
f = open(os.getcwd() + '/test.txt', 'r')
b = f.readlines()
print(f'b = {b}')
f.close()

둘다 test.txt라는 파일을 정상적으로 읽었다.

a = ['test1\n', 'test2\n', 'test3']
b = ['test1\n', 'test2\n', 'test3']

 

그럼 파일 쓰기는 어떻게 할까? 'r' 대신 'w'나 'a'를 사용하면 된다.

r = 읽기

w= 쓰기(덮어쓰기)

a = 쓰기(추가하기)

 

먼저 a에 대한 샘플이다.

with open(os.getcwd() + '/test.txt', 'a') as f:
    f.write('\ntest4')

with open(os.getcwd() + '/test.txt', 'r') as f:
    a = f.readlines()
    print(f'a = {a}')

 

 이전 data에서 test4를 추가했더니 가장 뒤에 test4가 생겼다.

a = ['test1\n', 'test2\n', 'test3\n', 'test4']

 

이번에는 w 옵션을 넣어보도록 하자.

with open(os.getcwd() + '/test.txt', 'w') as f:
    f.write('\ntest4')

with open(os.getcwd() + '/test.txt', 'r') as f:
    a = f.readlines()
    print(f'a = {a}')

 

기존 내용이 사라지고 새로 추가한 내용만 있는것을 볼 수 있다.

a = ['\n', 'test4']

 

이번에는 readlines() 말고 어떤 함수들이 있는지 하나 하나 알아보자

read(n) = n바이트 읽기 (n을 넣지 않으면 모두 읽기)

readline() = 한줄 한줄 읽기

readlines() = 전체 읽기

seek() = 특정 위치로 파일의 커서를 옮기고자 할 때 사용

tell() = 현재 커서의 위치를 반환

 

우선 read(n)이다.

with open(os.getcwd() + '/test.txt', 'r') as f:
    a = f.read()
    print(a)
print('='*50)    
with open(os.getcwd() + '/test.txt', 'r') as f:   
    b = f.read(10)
    print(b)

 

아무것도 넣지 않을 경우 모두 출력되었고, 10을 넣자 10개만 출력된것을 알 수 있다.

test1
test2
test3
==================================================
test1
test

 

이번에는 readline()이다.

with open(os.getcwd() + '/test.txt', 'r') as f:
    a = f.readline()
    print(a)
print('='*50)
with open(os.getcwd() + '/test.txt', 'r') as f:   
    b = f.readline(3)
    print(b)

 

첫줄만 읽어온 것을 알 수 있다. readline()으로 모든 글을 읽으려면 for 문을 사용해야 한다.

test1

==================================================
tes

 

이제 몇 가지 응용(?) 사례를 확인해보도록 하자.

첫번째는 txt파일을 읽은 후 해당 값을 참조해서 변수에 담는 방식이다. 파이썬이 설치되지 않은 환경에서 py 파일이 아니라 exe파일로 만들어서(pyinstaller) 실행할 때 사용하면 좋을 것 같다.

 

우선 아래와 같은 txt파일이 있고, a,b,c를 각각 변수로 사용한다고 해보자.

a=test1
b=test2
c=test3

아래와 같이 작성하면 txt파일을 읽은 후 해당 내용을 파이썬 변수에 담을 수 있다.

with open(os.getcwd() + '/test.txt', 'r', encoding="UTF-8") as f:
    for line in f.readlines():
        site = line.split('=')
        if site[0] == 'a' :
            a = (site[1].replace('\n',''))
        elif site[0] == 'b' :
            b = (site[1].replace('\n',''))
        elif site[0] == 'c' :
            c = (site[1].replace('\n',''))
        else :
            pass
print(a,b,c)

 

아래처럼 append를 사용하면 리스트에 해당 내용들도 담을 수 있다.

LIST = []
with open(os.getcwd() + '/test.txt', 'r', encoding="UTF-8") as f:
    for line in f.readlines():
        site = line.split('=')
        if site[0] == 'a' or 'b' or 'c' :
            LIST.append(site[1].replace('\n','')) 
        else :
            pass
print(LIST)

 

이번에는 조금 다른 내용인데 print한 내용을 출력하는 것이 아니라 파일에 저장할수도 있다.

import os
import sys
temp = sys.stdout
sys.stdout = open(os.getcwd() + '/test.txt' , 'w', encoding="utf-8")   
print('test1\ntest2')           
sys.stdout.close()
sys.stdout = temp

이렇게 sys.stdout을 사용하면 pinrt문이 출력되는 것이 아니라 해당 위치의 파일에 저장이 된다.

그 외에 추가할만한 사항이 있으면 업데이트 예정이며, 궁금한 사항이 있으면 댓글 남겨주세요.

반응형

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

python 기초 - logging  (0) 2022.11.29
python 기초 - datetime  (0) 2022.11.29
python(old) - venv 사용하기  (0) 2022.10.27
python(old) - logging  (0) 2022.06.12
python(old) - datetime  (0) 2022.06.12