1. 程式人生 > >python的文件操作

python的文件操作

repl 慢慢 對象 tel 寫入文件 磁盤 同時 .get 文本

一、file讀文件

  讀寫文件是最常見的IO操作。Python內置了讀寫文件的函數。在磁盤上讀寫文件的功能都是由操作系統提供的,現代操作系統不允許普通的程序直接操作磁盤,所以,讀寫文件就是請求操作系統打開一個文件對象(通常稱為文件描述符),然後,通過操作系統提供的接口從這個文件對象中讀取數據(讀文件),或者把數據寫入這個文件對象(寫文件)。

  讀文件需要三個步驟:

  1.要以讀文件的模式打開一個文件對象,使用Python內置的open()函數,傳入文件名和標示符。標示符‘r‘表示讀。如果文件不存在,open()函數就會拋出一個IOError的錯誤,並且給出錯誤碼和詳細的信息告訴你文件不存在

  2.如果文件打開成功,接下來,調用read()方法可以一次讀取文件的全部內容,Python把內容讀到內存,用一個str對象表示

  3.最後一步是調用close()方法關閉文件。文件使用完畢後必須關閉,因為文件對象會占用操作系統的資源,並且操作系統同一時間能打開的文件數量也是有限的。

  程序代碼如下:

import codecs

f = codecs.open(1.txt,r)
print (f.read())
f.close()

  註:codecs模塊:主要用來解決文件亂碼的問題

  程序運行結果:

技術分享

  讀取文件後,對文件進行操作,程序代碼如下:

import codecs

f 
= codecs.open(1.txt) text = f.read() print(type(text)) result = text.replace(1,A) print (result) f.close()

  程序運行結果如下:

技術分享

二、file寫文件

  寫文件和讀文件是一樣的,唯一區別是調用open()函數時,傳入標識符‘w‘或者‘wb‘表示寫文本文件或寫二進制文件。可以反復調用write()來寫入文件,但是務必要調用f.close()來關閉文件。當我們寫文件時,操作系統往往不會立刻把數據寫入磁盤,而是放到內存緩存起來,空閑的時候再慢慢寫入。只有調用close()方法時,操作系統才保證把沒有寫入的數據全部寫入磁盤。忘記調用close()的後果是數據可能只寫了一部分到磁盤,剩下的丟失了。程序代碼如下:

  

import codecs

f = codecs.open(2.txt,wb)
f.write(hello world\n)
f.write(gggdgdsd\n)
f.write(huangdongju\n)
f.write(hello {0}\n.format(momo))
f.write(hello %s\n%huangodngju)
f.close()

  程序運行結果如下:

技術分享

  

三、file常用的方法

  1.readlines():用於讀取所有行(直到結束符 EOF)並返回列表,該列表可以由 Python 的 for... in ... 結構進行處理。如果碰到結束符 EOF 則返回空字符串。返回list,每一行作為list的單個元素。程序代碼如下:

  

import codecs
f = codecs.open(2.txt,rb)
text_list = f.readlines()
print (type(text_list))
print(text_list)
print (text_list[0])
f.close()

  程序運行結果如下:

技術分享

  2.readline():用於從文件讀取整行,包括 "\n" 字符。如果指定了一個非負數的參數,則返回指定大小的字節數,包括 "\n" 字符。

   next():返回叠代器的下一個項目

   程序代碼如下:

import codecs
f = codecs.open(2.txt,rb)
print (f.readline())
print (f.next())
f.close()

  程序運行結果:

  技術分享

  3.write():用於向文件中寫入指定字符串。

   writelines():用於向文件中寫入一序列的字符串。

  程序代碼如下:

import codecs
f = codecs.open(3.txt,wb)
f.write(huangdongju\nmomo\n11111\n)
f.writelines([aaaaa\n,bbbbb\n,ccccc\n])
f.close()

  程序運行結果:

技術分享

  4.tell():tell() 方法返回文件的當前位置,即文件指針當前位置。程序代碼如下:

import codecs
file = codecs.open(4.txt,wb)
file.write(helloworld!\nhuangdongju\n)
print(file.tell())
file.writelines([aaaaa\n,bbbbb\n,ccccc\n])
print (file.tell())
file.close()

  程序運行結果如下:

技術分享

技術分享

  5.seek():seek() 方法用於移動文件讀取指針到指定位置。程序代碼如下:

import codecs
file = codecs.open(4.txt,wb)
file.write(helloworld!\nhuangdongju\n)
print(file.tell())
file.writelines([aaaaa\n,bbbbb\n,ccccc\n])
print (file.tell())
file.seek(0)
file.write(all or nothing,now or never)
file.close()

  程序運行結果:

技術分享

    5.name屬性:讀取文件名

     closed屬性:關閉文件流返回true,未關閉返回false

    6.flush():flush() 方法是用來刷新緩沖區的,即將緩沖區中的數據立刻寫入文件,同時清空緩沖區,不需要是被動的等待輸出緩沖區寫入。一般情況下,文件關閉後會自動刷新緩沖區,但有時你需要在關閉前刷新它,這時就可以使用 flush() 方法。

四、file中with的用法

  在使用文件的時候,經常會忘記關閉文件流,使用with語句可以避免這種情況的發生。程序代碼如下:

import codecs

with codecs.open(1.txt,rb) as file:
    print (file.read())
    print (file.closed)
print (file.closed)

  程序運行結果:

技術分享

  打印文件的行號與內容,程序代碼如下:

import codecs
with codecs.open(1.txt,rb) as ff:
    for line, value  in enumerate(ff):
         print (line, value)

  程序運行結果如下:

技術分享

  制定行輸出,程序代碼如下:

import codecs
import linecache

with codecs.open(1.txt,rb) as ff:
    for line, value  in enumerate(ff):
         if line == 4-1:
             print (value)


count  = linecache.getline(1.txt,4)
print (count)    

  程序運行結果:

技術分享

  

python的文件操作