제13장 문건 읽기와 쓰기

10561 단어
문서의 읽기와 쓰기
  • file = open(path, flag, encoding) 파일을 열면 file 대상을 되돌려줍니다. 이렇게 열면 수동으로 encoding을 닫아야 합니다. 인코딩 방식 encoding = "utf-8"errors: 오류 처리 errors = "ignore"(오류 무시) 주의: Value Error: binary mode doesn't take an encoding argument (Value Error: 바이너리 모드는 인코딩 인자가 필요 없습니다)오픈 방식
    읽기 전용으로 파일을 열고 파일의 설명자를 파일의 시작에 놓습니다
    r
    파일을 바이너리 형식으로 열면 읽기 전용이고, 파일의 설명자는 파일의 시작에 있습니다
    rb
    읽기와 쓰기를 위한 파일을 엽니다. 파일의 설명자는 파일의 시작에 있습니다.
    r+
    쓰기 전용으로 파일을 엽니다. 파일이 이미 존재하면 덮어쓰고, 존재하지 않으면 새 파일을 만듭니다.
    w
    바이너리를 쓰기 위한 파일 값을 엽니다. 이 파일이 이미 존재하면 덮어쓰고, 존재하지 않으면 새 파일을 만듭니다.
    Wb
    읽기와 쓰기를 위한 파일을 엽니다. 존재하지 않으면 새 파일을 만듭니다.
    w+
    추가 쓰기를 위한 파일을 엽니다. 파일이 존재하면 파일 설명자가 파일 끝에 저장됩니다. 존재하지 않으면 생성됩니다.
    a
    추가 쓰기를 위한 파일을 엽니다. 파일이 존재하면 파일 설명자가 파일 끝에 저장됩니다. 존재하지 않으면 생성됩니다.
    ab
    파일 읽기와 쓰기를 위한 파일을 엽니다. 파일이 존재하면 파일 끝에 포인터가 존재하지 않으면 만듭니다.
    a+

  • 인스턴스
     # utf-8      
    f = open('1.txt','r',encoding='utf-8') # rb

    utf-8

    f = open('a.txt','w',encoding='utf-8')
    f.write(' ')


    2 파일 읽기
    ​ file.read ([size]) 는 파일에서 지정한 바이트 수를 읽고, 주어지지 않거나 마이너스일 경우 모든 것을 읽습니다.
    ​ file.readline([size])]에서 전체 행을 읽습니다.만약 크기가 주어진 바이트를 읽는다면
    ​ file.readlines () 모든 줄을 읽고 목록을 되돌려줍니다
    next (file) 는 파일의 다음 줄을 되돌려줍니다.
    seek (offset[, 1whence]) 방법은 파일 읽기 포인터를 지정한 위치로 이동하는 데 사용됩니다.
    f.seek(0)# 맨 위로 이동
    offset - 오프셋을 이동해야 하는 바이트 수를 나타내는 시작 오프셋
    whence: 선택할 수 있습니다. 기본값은 0입니다.오프셋 매개 변수를 정의하여 어느 위치에서 오프셋을 시작할지 표시합니다.0은 파일의 시작부터 계산하고, 1은 현재 위치부터 계산하고, 2는 파일의 끝부터 계산한다.
    3 파일 쓰기
    ​ file.write (str) 는 문자열을 파일에 쓰고 되돌아오는 값이 없습니다.
    ​ file.writelines () 는 파일에 시퀀스 문자열 목록을 씁니다. 줄을 바꾸려면 줄마다 줄 바꾸기를 추가해야 합니다.반환 값이 없습니다.
    ​ file.flush () 파일 내부 버퍼를 새로 고침하고 내부 버퍼의 데이터를 수동적으로 출력 버퍼가 쓰기를 기다리는 것이 아니라 바로 파일에 기록합니다.
    4 파일의 현재 위치를 반환합니다.
    ​ file.tell()
    5 파일 닫기
    ​ file.close()
    파일을 쓰기 위해 write() 를 반복해서 호출할 수 있지만, 반드시 f.close() 호출해서 파일을 닫아야 한다.우리가 파일을 쓸 때, 운영체제는 종종 데이터를 디스크에 즉각 쓰지 않고, 메모리 캐시에 넣고, 한가할 때 천천히 쓴다.close() 방법을 호출해야만 운영체제는 쓰지 않은 데이터를 모두 디스크에 쓸 수 있다.호출을 잊어버린 결과close()는 데이터가 디스크에 일부분만 썼을 수도 있고 나머지는 잃어버렸을 수도 있다.그래서 with문구로 안전하다
    utf-8 한 바이트는 3바이트gbk 한 바이트는 2바이트
    2 파일을 열면 닫을 필요가 없습니다
     with open(path, "a") as f2:
    f2.write("good man")

    문장의 끝에 도달할 때, 이상이 발생하더라도 자동으로 파일을 닫습니다
    인스턴스
    with를 사용하지 않는 경우
     file = open("test.txt","r")
    for line in file.readlines():
    print line
    file.close()

    이렇게 파일을 직접 열면 이상이 발생합니다. 만약에 읽는 과정에서 파일이 존재하지 않거나 이상이 발생하면 오류가 발생합니다.close 방법은 실행할 수 없고 파일은 닫을 수 없습니다.
    with를 사용하는 경우
     file= open("test.txt","r")
    try:
    for line in file.readlines():
    print line
    except:
    print "error"
    finally:
    file.close()

    with 문장의 작용 효과는 위의try-except-finally에 해당한다
    3 인코딩과 디코딩은 어떤 인코딩을 사용하든지 그 인코딩을 사용한다
  • str.encode("utf-8")
  • str.decode("utf-8")

  • 사열자
    1. 파일 암호화
     file = open('1.py','r')
    myfile = open('2.py','a+')
    x = file.read()
    for i in x:
    z = chr(ord(i)+10)
    myfile.write(z)

    2. 파일 복호화
     file = open('4.py','r')
    myfile = open('5.py','a+')
    x = file.read()
    for i in x:
    z = chr(ord(i)-10)
    myfile.write(z)

    4pickle 서열화 작업
    사용 설명: 서열을 파일에 서열화할 수 있다. 즉, 그대로 써서 꺼낼 수 있다.
    2진법으로 파일에 쓰고 2진법으로 메모리에 읽기
    (1) Dump 쓰기 파일
    데이터를 서열화한 후 파일에 쓰기
    ​ pickle.dump (데이터, 파일이 되돌아오는 파일 열기)
    (2)load 데이터 반서열화
    ​ pickle.load(파일 열기 반환 file)
    (3)dumps는 데이터를 서열화하여 직접 되돌려줍니다
    ​ pickle.dumps(데이터)
    (4)loads는dumps 서열화된 진수를 일반적인 데이터 형식으로 변환합니다
    ​ pickle.loads (서열화된 데이터)
    예를 들면 다음과 같습니다.
     import pickle

    mylist=[[1,2,3,4,5,6,7],["abc","xyz","hello"]]
    file=open(r"C:\Users\Tsinghua-yincheng\Desktop\list.bin","wb")
    pickle.dump(mylist,file) # list
    file.close()

    import pickle
    mylist=[]
    file=open(r"C:\Users\Tsinghua-yincheng\Desktop\list.bin","rb")
    mylist=pickle.load(file) # list
    print(mylist)

    5진 파일
    [바이너리 파일]원인은 대략 세 가지가 있다. 첫째, [이진 파일]이 비교적 공간을 절약하는데 이 두 가지가 [문자형 데이터]를 저장할 때 차이가 없다.그러나 숫자, 특히 실형 숫자를 저장할 때 2진법은 공간을 더욱 절약한다. 예를 들어 리얼*4의 데이터를 저장한다. 3.1415927, 텍스트 파일은 9개의 바이트가 필요하고 각각 저장: 3.1415927 이 9개의 ASCII 값과 [바이너리 파일]이 4바이트(DB 0F 4940)만 있으면 된다는 두 번째 이유는 메모리에 계산된 데이터가 모두 바이너리 형식으로 저장되어 있기 때문에 바이너리로 파일에 저장하는 것이 더욱 빠르기 때문이다.텍스트 파일로 저장하려면 변환 과정이 필요합니다.데이터의 양이 매우 많을 때, 양자는 뚜렷한 속도 차이가 있을 것이다.셋째, 비교적 정확한 데이터로 2진법 저장을 사용하면 유효 위치의 분실을 초래하지 않는다.

    좋은 웹페이지 즐겨찾기