天天看點

python檔案操作

使用open打開檔案後一定要記得調用檔案對象的close()方法。比如可以用try/finally語句來確定最後能關閉檔案。

file_object = open('thefile.txt')

python檔案操作

try:

python檔案操作

     all_the_text = file_object.read( )

python檔案操作

finally:

python檔案操作

     file_object.close( )

注:不能把open語句放在try塊裡,因為當打開檔案出現異常時,檔案對象file_object無法執行close()方法。

點選(此處)折疊或打開

#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):

    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):

        lines = f.readlines()

        for line in lines:

    finally:

        f.close()

#從檔案中讀取所有内容,賦予一個字元串變量

def readBYread(filename):

        content = f.read()

    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

python檔案操作

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

python檔案操作

#第二個參數預設為r

python檔案操作

input = open('data')

python檔案操作

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

python檔案操作
python檔案操作
python檔案操作
python檔案操作
python檔案操作
python檔案操作

file_object = open('abinfile', 'rb')

python檔案操作
python檔案操作

    while True:

python檔案操作

         chunk = file_object.read(100)

python檔案操作

        if not chunk:

python檔案操作
python檔案操作

         do_something_with(chunk)

python檔案操作
python檔案操作
python檔案操作

list_of_all_the_lines = file_object.readlines( )

如果檔案是文本檔案,還可以直接周遊檔案對象擷取每行:

python檔案操作

for line in file_object:

python檔案操作

     process line

python檔案操作

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

python檔案操作

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

python檔案操作

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

python檔案操作

file_object = open('thefile.txt', 'w')

python檔案操作

file_object.write(all_the_text)

python檔案操作

file_object.close( )

python檔案操作

file_object.writelines(list_of_text_strings)

注意,調用writelines寫入多行在性能上會比使用write一次性寫入要高。

在處理日志檔案的時候,常常會遇到這樣的情況:日志檔案巨大,不可能一次性把整個檔案讀入到記憶體中進行處理,例如需要在一台實體記憶體為 2GB 的機器上處理一個 2GB 的日志檔案,我們可能希望每次隻處理其中 200MB 的内容。

在 Python 中,内置的 File 對象直接提供了一個 readlines(sizehint) 函數來完成這樣的事情。以下面的代碼為例:

每次調用 readlines(sizehint) 函數,會傳回大約 200MB 的資料,而且所傳回的必然都是完整的行資料,大多數情況下,傳回的資料的位元組數會稍微比 sizehint 指定的值大一點(除最後一次調用 readlines(sizehint) 函數的時候)。通常情況下,Python 會自動将使用者指定的 sizehint 的值調整成内部緩存大小的整數倍。

一、用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()

二、檔案内容追加,從0到9的10個随機整數:

>>>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()

三、檔案内容追加,從0到9的随機整數, 10個數字一行,共10行:

>>> 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')    

四、把标準輸出定向到檔案:

>>> import sys

>>> sys.stdout = open("stdout.txt", "w")

>>>  . . .

五、檔案的讀寫

一、檔案打開:

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

入口參數:   name 檔案名

                  mode   選項,字元串

                  buffering   是否緩沖 (0=不緩沖,1=緩沖, >1的int數=緩沖區大小)

傳回值 : 檔案對象

mode 選項:

"r"   以讀方式打開,隻能讀檔案 , 如果檔案不存在,會發生異常      

                                                     如果檔案已存在,先清空,再打開檔案

"rb"   以二進制讀方式打開,隻能讀檔案 , 如果檔案不存在,會發生異常      

"wb" 以二進制寫方式打開,隻能寫檔案, 如果檔案不存在,建立該檔案

"rt"   以文本讀方式打開,隻能讀檔案 , 如果檔案不存在,會發生異常      

"wt" 以文本寫方式打開,隻能寫檔案, 如果檔案不存在,建立該檔案

"rb+"   以二進制讀方式打開,可以讀、寫檔案 , 如果檔案不存在,會發生異常      

"wb+" 以二進制寫方式打開,可以讀、寫檔案, 如果檔案不存在,建立該檔案

二、關閉檔案

f.close()

當檔案讀寫完畢後,應關閉檔案。

三、清空檔案内容

f.truncate()

注意:僅當以 "r+"   "rb+"    "w"   "wb" "wb+"等以可寫模式打開的檔案才可以執行該功能。

四、檔案的指針定位與查詢

(1)檔案指針:

      檔案被打開後,其對象儲存在 f 中, 它會記住檔案的目前位置,以便于執行讀、寫操作,這個位置稱為檔案的指針( 一個從檔案頭部開始計算的位元組數 long 類型 )。

(2)檔案打開時的位置:

      以"r"   "r+"   "rb+" 讀方式, "w"   "w+"   "wb+"寫方式 打開的檔案,

     一開始,檔案指針均指向檔案的頭部。

(3) 擷取檔案指針的值:

      L = f.tell()

(4) 移動檔案的指針

       f.seek(   偏移量, 選項 )

      選項 =0 時, 表示将檔案指針指向從檔案頭部到 "偏移量"位元組處。

      選項 =1 時, 表示将檔案指針指向從檔案的目前位置,向後移動 "偏移量"位元組。

      選項 =2 時, 表示将檔案指針指向從檔案的尾部,,向前移動 "偏移量"位元組。

五、從檔案讀取指内容   

1 文本檔案(以"rt"方式打開的檔案)的讀取  

          s = f.readline(     )

        傳回值: s 是字元串,從檔案中讀取的一行,含行結束符。

        說明: (1)  如果 len( s ) =0 表示已到檔案尾

                    (2)   如果是檔案的最後一行,有可能沒有行結束符

2 二進制檔案(以"rb"、"rb+"、"wb+" 方式打開的檔案)的讀取  

          s = f.read(    n )

   對于圖檔、視訊等檔案必須使用b的模式讀寫

     說明: (1)  如果 len( s ) =0 表示已到檔案尾

                  (2)   檔案讀取後,檔案的指針向後移動 len(s) 位元組。

                (3)如果磁道已壞,會發生異常。

六、向檔案寫入一個字元串   

    f.write(    s )

    參數:       s 要寫入的字元串

    說明: (1)檔案寫入後,檔案的指針向後移動 len(s) 位元組。

                 (2)如果磁道已壞,或磁盤已滿會發生異常。

傳回值: s 是字元串,從檔案中讀取的内容

七、删除檔案

import os

os.remove(file)

python檔案操作
python檔案操作
python檔案操作
python檔案操作
python檔案操作
python檔案操作
python檔案操作
python檔案操作
python檔案操作
python檔案操作
python檔案操作
python檔案操作
python檔案操作
python檔案操作
python檔案操作
python檔案操作
python檔案操作
python檔案操作
python檔案操作
python檔案操作
python檔案操作
python檔案操作
python檔案操作
python檔案操作
python檔案操作
python檔案操作
python檔案操作
python檔案操作
python檔案操作
python檔案操作
python檔案操作
python檔案操作