python

[python] 파일 처리

전감자(◔◡◔) 2022. 9. 28. 17:42

-파일 읽기 

 

 

open 으로 열면 파일 스트림을 반환한다.

read() : 파일  전체 내용을 한 번에 읽어온다. 

따라서 각 행을 하나씩 처리하기보다는 파일 전체의 내용을 다루어야할 때 사용함

 

readline() : 파일의 내용을 한 줄씩 읽어옴 파일에 몇 줄이 있는지 모름 , while 문과 함께 써주어야함 

 

readlines() : 파일의 내용을 한 줄씩 리스트 형태로 가져옴. 

 

 

 

 

'''

파일 포맷 종류
1. .txt 파일 읽기/ 쓰기
2. .csv 파일 읽기/ 쓰기(,(쉼표)로 구분된 문자열 의미)
    예> 홍길동,20,서울
    .json 파일 읽기/쓰기 (json:javascript object notation, 자바스크립트에서 사용하는 객체 표현식, 매우 범용적으로 사용됨)
    ==> 현재 사용중인 프로그램 언어의 공통 포맷임.
    ==> {"key":"value","key":value}

파일 읽기/쓰기
                      open ("파일 경로",mode)
                      mode:"r":읽기
                           "w":쓰기(덮어쓰기)
                           "a":쓰기(추가,append)
                      close()
    파이썬 프로그램 ---------------------> 파일 (txt.csv,json 등 )

['_CHUNK_SIZE', '__class__', '__del__', '__delattr__',
 '__dict__', '__dir__', '__doc__', '__enter__', '__eq__',
  '__exit__', '__format__', '__ge__', '__getattribute__',
  '__gt__', '__hash__', '__init__', '__init_subclass__',
  '__iter__', '__le__', '__lt__', '__ne__', '__new__',
  '__next__', '__reduce__', '__reduce_ex__', '__repr__',
  '__setattr__', '__sizeof__', '__str__', '__subclasshook__',
   '_checkClosed', '_checkReadable', '_checkSeekable',
   '_checkWritable', '_finalizing',


   'buffer', 'close', '
   closed', 'detach', 'encoding', 'errors', 'fileno',
   'flush', 'isatty', 'line_buffering', 'mode', 'name',
    'newlines', 'read', 'readable', 'readline', 'readlines',
     'reconfigure', 'seek', 'seekable', 'tell', 'truncate',
     'writable', 'write', 'write_through', 'writelines']

print(dir(f))
'''

#1. 읽기
f=open("./resourse/aaa.txt","r",encoding="utf-8")
line=f.readline()
print(line)
f.close()
print("$"*150)
#2. with문 (*****)

'''
with문은 자동으로 close 해줌

with open("./resourse/aaa.txt","r",encoding="utf-8") as f
     line=f.readline()
     print(line)
     
'''

with open("./resourse/aaa.txt","r",encoding="utf-8") as f:
    line=f.readline()
    print(line)

print("$"*150)

#3. f.readline() 모두 읽기==> 반복문 처리
with open("./resourse/aaa.txt","r",encoding="utf-8") as f:
    while True:
        line=f.readline()
        if not line:break #line 빈문자열이면 false -> 부정하면 True
        print(line,end="")
print("$"*150)

#4. f.read()
with open("./resourse/aaa.txt","r",encoding="utf-8") as f:
    xxx=f.read()#f.read([글자개수])
    print(">>>",xxx)

#5. readlines()
with open("./resourse/aaa.txt","r",encoding="utf-8") as f:
    xxx=f.readlines()
    for line in xxx:
        print(line,end="")
print("$"*150)
#6. 파일이 없을 때 예외가 발생함 ==>FileNotFoundError
try:
    with open("./resourse/aaa2.txt","r",encoding="utf-8") as f:
        line=f.readline()
        print(line)
except FileNotFoundError as e:
    print("파일이 없습니다. 확인하세요")

print("end 정상종료")

 

readline() 반복문 예시에서 if문의 조건문에 주어진 line은 bool 형의 자료가 아닌 것을 확인 할 수 있는데,

조건문에 bool이 아닌 것이 주어졌을 때 숫자는 0, 문자열은 빈 칸("")인 경우 False로 인식한다.

따라서 line에 아무것도 없는 빈 칸이 읽힌 경우 즉, 파일의 끝에 도달하여 더 이상 읽을 것이 없을 때

line은 False로 인식되고 not line이 not False가 되어 True로써 작동하는 것입니다.

 

 

 

write(): 파일에 한 줄을 쓸 때 사용 반복문을 사용하여 여러줄을 기록 할 수 있다. 

 

writelines(): writelines는 리스트에 들어있는 문자열을 파일에 쓸 때 사용한다.

특히 writelines를 사용할 때는 반드시 리스트의 각 문자열 끝에 개행 문자 \n을 붙여주어야 하는데, 그렇지 않으면 문자열이 모두 한 줄로 붙어서 저장되므로 주의해야 한다.   

 

#1. 쓰기=> 파일이 없으면 자동으로 생성함
with open("./resourse/bbb.txt","w",encoding="utf-8") as f:
    f.write("hello")

print("#"*150)

#2. 쓰기=> 파일이 없으면 자동으로 생성함 "a"모드는 append 됨
with open("./resourse/bbb2.txt","a",encoding="utf-8") as f:
    f.write("hi")

print("#"*150)

#3. 쓰기=> print() 함수이용
with open("./resourse/bbb4.txt","a",encoding="utf-8") as f:
    print("world4\n",file=f)

print("#"*150)

#4. 쓰기=> writelines(["a","b",....])
with open("./resourse/bbb4.txt","a",encoding="utf-8") as f:
    xx=["hello",'A']
    xx="\n".join(xx)
    f.writelines(xx)


print("#"*150)

 

일반적으로 파일을 w 모드로 열게 되면 다시 프로그램을 했을 때 처음 내용이 없어지고 

새로운 문장이 파일에 기록되는데 a 모드로 열게되면 실행할 때마다 원본 파일에 계속해서 추가 된다.

 

 

'python' 카테고리의 다른 글

[numpy] 1차원 배열 - 벡터  (1) 2022.09.28
[numpy] 0차원 배열 스칼라  (0) 2022.09.28
[python] 날짜 데이터  (0) 2022.09.27
[python] 예외 처리  (0) 2022.09.27
[python] 강제성 부여 추상클래스 | 매직 메서드  (0) 2022.09.26