Python 파일 작업


open을 사용하여 파일을 연 후에는 반드시 파일 객체의 close() 메서드를 호출하세요. 예를 들어, try/finally 문을 사용하여 파일이 최종적으로 닫힐 수 있는지 확인할 수 있습니다.

file_object = open('thefile.txt')
try:
     all_the_text = file_object.read( )
finally:
     file_object.close( )

참고: 파일을 열 때 예외가 발생하면 파일 개체 file_object가 close() 메서드를 실행할 수 없기 때문에 open 문을 try 블록에 배치할 수 없습니다.


접거나 열려면 (여기)를 클릭하세요.

#coding:utf-8
#!/usr/bin/python
# Filename: fileRW.py
import os

context=""" hello world,hello
"r" 以读方式打开,只能读文件 , 如果文件不存在,会发生异常 
"w" 以写方式打开,只能写文件, 如果文件不存在,创建该文件
                                                     如果文件已存在,先清空,再打开文件"""
def createfileBYwrite(filename):
    f = open(filename,'w') #打开文件open()是file()的别名
    f.write(context) #把字符串写入文件
    f.close() #关闭文件

#注意,调用writelines写入多行在性能上会比使用write一次性写入要高。
def createfileBYwritelines(filename):
    f = open(filename,'w') #打开文件open()是file()的别名
    try:
        f.writelines(context) #把字符串写入文件
    finally: 
        f.close() #关闭文件

def readBYreadline(filename):
    f = open(filename)
    while True:
        line =f.readline()#当文件指针移动到末尾继续readline会出现错误,所以后面要加判断
        if line:
            print line,
        else:
            break
    f.close()

#需要通过循环访问readlines()返回列表中的元素
def readBYreadlines(filename):
    f = open(filename)
    try:
        lines = f.readlines()
        for line in lines:
            print line,
    finally:
        f.close()
    
#从文件中读取所有内容,赋予一个字符串变量
def readBYread(filename):
    f = open(filename)
    try:
        content = f.read()
    finally:
        f.close()
    print content 
    
if __name__== "__main__":
    filename="hello.txt"
    createfileBYwritelines(filename)
    readBYread(filename)
    #把文件删除掉
    if os.path.exists(filename):
        print "文件存在%s" %filename
        os.remove(filename)
    
    
 hello world,hello
"r" 以读方式打开,只能读文件 , 如果文件不存在,会发生异常 
"w" 以写方式打开,只能写文件, 如果文件不存在,创建该文件
                                                     如果文件已存在,先清空,再打开文件
文件存在hello.txt


2. 파일 읽기

텍스트 파일 읽기

input = open('data', 'r')
#第二个参数默认为r
input = open('data')

바이너리 읽기 파일

input = open('data', 'rb')

모든 콘텐츠 읽기

file_object = open('thefile.txt')
try:
     all_the_text = file_object.read( )
finally:
     file_object.close( )

고정 바이트 읽기

file_object = open('abinfile', 'rb')
try:
    while True:
         chunk = file_object.read(100)
        if not chunk:
            break
         do_something_with(chunk)
finally:
     file_object.close( )

각 줄 읽기

list_of_all_the_lines = file_object.readlines( )


파일이 텍스트 파일인 경우 파일 개체를 직접 탐색하여 각 줄을 가져올 수도 있습니다. :

for line in file_object:
     process line

3. 파일 쓰기

텍스트 파일 쓰기

output = open('data', 'w')

바이너리 파일 쓰기

output = open('data', 'wb')

쓰기 파일 추가

output = open('data', 'w+')

데이터 쓰기

file_object = open('thefile.txt', 'w')
file_object.write(all_the_text)
file_object.close( )

여러 줄 쓰기

file_object.writelines(list_of_text_strings)


여러 줄을 쓰기 위해 writeline을 호출하는 것이 write를 사용하여 한 번에 쓰는 것보다 성능이 더 높다는 점에 유의하세요.

로그 파일을 처리할 때 다음과 같은 상황에 자주 직면하게 됩니다. 로그 파일이 너무 커서 한 번에 처리하기 위해 전체 파일을 메모리로 읽어들이는 것이 불가능합니다. 2GB의 물리적 메모리는 2GB 로그 파일의 경우 한 번에 200MB의 콘텐츠만 처리하기를 원할 수 있습니다.
Python에서는 내장 File 객체가 이러한 작업을 수행하기 위해 readlines(sizehint) 함수를 직접 제공합니다. 다음 코드를 예로 들어 보겠습니다.

file = open('test.log', 'r') sizehint = 209715200   # 200M position = 0 lines = file.readlines(sizehint) while not file.tell() - position < 0:        position = file.tell()        lines = file.readlines(sizehint)


readlines(sizehint) 함수가 호출될 때마다 약 200MB의 데이터가 반환되며, 반환되는 데이터는 완전한 행 데이터여야 합니다. 대부분의 경우 반환되는 데이터의 바이트 수는 값보다 약간 큽니다. sizehint에 의해 지정됩니다(readlines(sizehint) 함수가 마지막으로 호출되는 경우 제외). 일반적으로 Python은 사용자가 지정한 sizehint 값을 내부 캐시 크기의 정수배로 자동 조정합니다.


1. Python을 사용하여 새 파일을 만듭니다. 내용은 0에서 9까지의 정수이며, 각 숫자는 한 줄을 차지합니다.

#python
>>>f=open('f.txt','w')    # r只读,w可写,a追加
>>>for i in range(0,10):f.write(str(i)+'\n')
.  .  .
>>> f.close()


2. 파일 내용을 추가합니다. 0에서 9까지의 임의의 정수 10개 :
#python
>>>import random
>>>f=open('f.txt','a')
>>>for i in range(0,10):f.write(str(random.randint(0,9)))
.  .  .
>>>f.write('\n')
>>>f.close()


3. 파일 내용을 추가합니다. 0에서 9 사이의 임의의 정수, 한 줄에 10개의 숫자, 총 10줄:
#python
>>> import random
>>> f=open('f.txt','a')
>>> for i in range(0,10):
.  .  .     for i in range(0,10):f.write(str(random.randint(0,9))) 
.  .  .     f.write('\n')    
.  .  .
>>> f.close()


4. 표준 출력을 파일에 지정합니다:
#python
>>> import sys
>>> sys.stdout = open("stdout.txt", "w")
>>>  . . .


5. 파일 읽기 및 쓰기

1. 파일 열기:

f = file(name[, mode[, buffering]])

입력 매개변수: 이름 파일 이름

옵션, 문자열

버퍼링 여부 버퍼링 여부(0=버퍼링 없음, 1=버퍼링, >1 int 숫자 = 버퍼 크기)

반환 값: 파일 개체

모드 옵션:

"r" 읽기 모드로 열면 파일만 읽을 수 있습니다. 파일이 없으면 예외가 발생합니다.

"w"는 쓰기 모드로 열리고 파일에만 쓸 수 있습니다. 파일이 없으면

 rb" 파일을 바이너리로 만듭니다. 읽기 모드에서는 파일을 읽을 수만 있습니다. 파일이 없으면 예외가 발생합니다.

"wb" 바이너리 쓰기 모드에서는 파일이 없으면 쓰기만 가능합니다. .

비어 있고 파일을 엽니다.

"rt" 텍스트 읽기 모드로 열면 파일을 읽을 수만 있습니다. 파일이 없으면 예외가 발생합니다.

"wt" 텍스트 쓰기 모드로 엽니다. 파일을 쓰기만 할 수 있습니다. 파일이 없으면 이 파일을 만드세요

, 파일이 이미 존재한다면 먼저 파일을 지우고 파일을 엽니다.

"RB+"는 바이너리 읽기로 열립니다. 파일이 존재하지 않으면 쓰기가 발생합니다. 파일이 없으면 파일을 생성하세요

                                                                                      파일을 읽고 쓸 때는 파일을 닫아야 합니다.

3. 파일 내용 지우기

f.truncate()

참고: "r+" "rb+" "w" "wb" "wb+"와 같이 쓰기 가능 모드로 열린 파일만 이 기능을 실행할 수 있습니다. .

4. 파일 포인터 위치 지정 및 쿼리

(1) 파일 포인터:

파일이 열린 후 해당 개체는 읽기 및 쓰기 작업을 용이하게 하기 위해 파일의 현재 위치를 기억합니다. , 이 위치를 파일 포인터(파일의 시작 부분부터 시작하는 바이트 수를 계산하는 긴 형식)라고 합니다.开 (2) 파일이 열리는 위치:

"R" "" R+"" Rb+"읽기 방법" W "" W+"" "WB+" 쓰기 파일을 엽니다.

(3) 파일 포인터 값 가져오기:

L = f.tell()

(4) 파일 포인터 이동

f.seek(offset, option) Option=0 , it 파일 헤드의 파일 포인터가 "오프셋" 바이트를 가리키는 것을 의미합니다.

옵션 =1인 경우 파일 포인터가 파일의 현재 위치를 가리키고 "오프셋" 바이트를 뒤로 이동한다는 의미입니다.

옵션 =2인 경우 파일 포인터가 파일 끝을 가리키고 "오프셋" 바이트를 앞으로 이동한다는 의미입니다.

5. 파일에서 내용 읽기

1 텍스트 파일 읽기("rt" 모드에서 열린 파일)

      s = f.readline(     )

            반환 값: s는 줄 종결자를 포함하여 파일에서 읽은 줄인 문자열입니다.如果 설명: (1) len(s) = 0이면 파일 끝에 도달했음을 의미합니다. (2) 파일의 마지막 줄이면 종료 패브릭이 없을 수 있습니다.

바이너리 파일 2개(" RB", "" "" "Rb", "" "" rb+", "wb+" 모드) 읽기

s = f.read(n )

사진, 비디오 및 기타 파일의 경우 다음을 사용해야 합니다. 읽고 쓰기 위한 b 모드 참고: (1) len(s ) =0이 파일의 끝에 도달했음을 의미하는 경우

                        (2) 파일을 읽은 후 파일 포인터가 len(s만큼 뒤로 이동합니다. ) 바이트.道 (3) 자기장이 나쁘면 이상이 생긴다.

6. 파일에 문자열을 씁니다.

그런 다음 len(s) 바이트를 이동합니다.道 (2) 자기장이 나쁘거나 디스크가 가득 차면 이상이 생긴다.

     

반환 값: s는 문자열, 파일에서 읽은 내용

7. 파일 삭제

import os

os.remove(file)