8.1 파일 입출력

  • r: 파일 읽기
  • w: 파일 쓰기( 파일이 존재 하지 않으면 파일생성, 파일이 존재하면 덮어씀 )
  • x: 파일 쓰기( 파일이 존재 하지 않을 경우에만 해당 )
  • a: 파일 추가하기(파일이 존재하면 파일의 끝에서부터 쓴다)
  • t(또는 아무것도 명시하지 않음): 텍스트타입
  • b: 이진 타입
  • 다사용하면 꼭 닫아야 한다.

    8.1.1 텍스트파일 쓰기:write()

    poem = '''There was a young lady named Bright,
    Whose speed was far faster than light;
    She set out one day
    In a relative way,
    And returned on the previous night.'''
    len(poem)
    

    150

    fout = open('relativity', 'wt')
    fout.write(poem)
    

    150

    fout.close()
    
    fout = open('relativity2', 'wt')
    print(poem, file=fout)
    fout.close()
    
    fout = open('relativity3', 'wt')
    print(poem, file=fout, sep='', end='')
    fout.close()
    
    fout = open('relativity4', 'wt')
    size = len(poem)
    offset = 0
    chunk = 100
    while True:
    if offset > size:
    break
    print(fout.write(poem[offset:offset+chunk]))
    offset+=chunk
    

    100 50

    fout.close()
    
    fout = open('relativity', 'xt')
    
FileExistsError Traceback (most recent call last)
<ipython-input-12-e76edf949aa7> in <module>()
----> 1 fout = open('relativity', 'xt')

FileExistsError: [Errno 17] File exists: 'relativity'
try:
fout = open('relativity', 'xt')
fout.write('stomp stomp stomp')
except FileExistsError:
print('relativity already exists!. That was a close one')

relativity already exists!. That was a close one

8.1.2 텍스트 파일 읽기: read(), readline(), readlines()

poem = ''
fin = open('relativity', 'rt')
poem = fin.read()
fin.close()
len(poem)

150

poem = ''
fin = open('relativity', 'rt')
chunk = 100
while True:
fragment = fin.read(chunk)
if not fragment:
break
poem += fragment
fin.close()
len(poem)

150

poem = ''
fin = open('relativity', 'rt')
while True:
line = fin.readline()
if not line:
break
poem += line
fin.close()
len(poem)

150

poem = ''
fin = open('relativity', 'rt')
for line in fin:
poem += line
fin.close()
len(poem)

150

fin = open('relativity', 'rt')
lines = fin.readlines()
fin.close()
print(len(lines), 'lines read')

5 lines read

for line in lines:
print(line, end='')

There was a young lady named Bright, Whose speed was far faster than light; She set out one day In a relative way, And returned on the previous night.

8.1.3 이진 파일 쓰기:write()

  • mode에 ‘b’를 포함시키면 파일을 이진 모드로 연다.
    bdata = bytes(range(0,255))
    len(bdata)
    

    255

    f = open('bfile', 'wb')
    f.write(bdata)
    f.close()
    
    f = open('bfile', 'wb')
    size = len(bdata)
    offset = 0
    chunk = 100
    while True:
    if offset > size:
    break
    f.write(bdata[offset:offset+chunk])
    offset += chunk
    
    f.close()
    

    8.1.4 이진 파일 읽기: read()

    fin = open('bfile', 'rb')
    data = fin.read()
    len(data)
    

    255

    fin.close()
    

    8.1.5 자동으로 파일 닫기: with

    with open('relativity', 'wt') as fout:
    fout.write(poem)
    

    8.1.6 파일 위치 찾기:seek()

    fin = open('bfile', 'rb')
    fin.tell()
    

    0

    fin.seek(254)
    

    254

    bdata = fin.read()
    len(bdata)
    

    1

    bdata[0]
    

    254

    import os
    os.SEEK_SET
    

    0

    os.SEEK_CUR
    

    1

    os.SEEK_END
    

    2

    fin = open('bfile', 'rb')
    
    fin.seek(-1, 2)
    

    254

    fin.tell()
    

    254

    bdata = fin.read()
    len(bdata)
    

    1

    bdata[0]
    

    254

    fin = open('bfile', 'rb')
    
    fin.seek(254, 0)
    

    254

    fin.tell()
    

    254

    fin.seek(1, 1)
    

    255

    fin.tell()
    

    255

    bdata = fin.read()
    len(bdata)
    

    0

    bdata[0]
    
IndexError Traceback (most recent call last)
<ipython-input-112-5edc6256e1fd> in <module>()
----> 1 bdata[0]

IndexError: index out of range

Comments