python3_05.文件操作那些事

文件操作的學習筆記。

>>> file = open('/tmp/test.txt','r')

>>> file.read()

'root:x:0:0:root:/root:/bin/bash\nbin:x:1:1:bin:/bin:/sbin/nologin\ndaemon:x:2:2:daemon:/sbin:/sbin/nologin\nadm:x:3:4:adm:/var/adm:/sbin/nologin\nlp:x:4:7:lp:/var/spool/lpd:/sbin/nologin\nsync:x:5:0:sync:/sbin:/bin/sync\nmysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash\n'

>>> file.close()  #文件使用完以後要關閉文件,因爲文件會佔用資源

>>> with open('/tmp/test.txt','r') as f:

...     print(f.read())

...    #with語句自動調用了close方法

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

adm:x:3:4:adm:/var/adm:/sbin/nologin

lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

sync:x:5:0:sync:/sbin:/bin/sync

mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash


read() 一次性讀取所有內容,文件過大,內存容易出問題

read(size) size指定每次最多讀取的字節數,更安全

readline()  每次讀取一行

如果文件很小,read()一次性讀取最方便;如果不能確定文件大小,反覆調用read(size)比較保險;如果是配置文件,調用readlines()最方便:

#f = open('/Users/michael/gbk.txt', 'r', encoding='gbk', errors='ignore', newline='')

open可以傳入一些參數:

encoding:指定編碼

errors:處理錯誤的方式,最簡單的是ignore忽略,但是這樣用多了不太好。

newline='':Python可以識別所有的普通換行符並將其轉換爲單個 \n 字符。 類似的,在輸出時會將換行符 \n 轉換爲系統默認的換行符。 如果你不希望這種默認的處理方式,可以給 open() 函數傳入參數 newline='' 


>>> with open('/tmp/hello.txt','w') as f:

...     f.write('hello')              #文件寫入

...     print('你好',file=f)   #print輸入重定向到文件中

...

>>> file.read()

'hello你好\n'


#-- 文件基本操作

   output = open(r'C:\spam', 'w')          # 打開輸出文件,用於寫

   input = open('data', 'r')               # 打開輸入文件,用於讀。打開的方式可以爲'w', 'r', 'a', 'wb', 'rb', 'ab'等

   fp.read([size])                         # size爲讀取的長度,以byte爲單位

   fp.readline([size])                     # 讀一行,如果定義了size,有可能返回的只是一行的一部分

   fp.readlines([size])                    # 把文件每一行作爲一個list的一個成員,並返回這個list。其實它的內部是通過循環調用readline()來實現的。如果提供size參數,size是表示讀取內容的總長。

   fp.readable()                           # 是否可讀

   fp.write(str)                           # 把str寫到文件中,write()並不會在str後加上一個換行符

   fp.writelines(seq)                      # 把seq的內容全部寫到文件中(多行一次性寫入)

   fp.writeable()                          # 是否可寫

   fp.close()                              # 關閉文件。

   fp.flush()                              # 把緩衝區的內容寫入硬盤

   fp.fileno()                             # 返回一個長整型的”文件標籤“

   fp.isatty()                             # 文件是否是一個終端設備文件(unix系統中的)

   fp.tell()                               # 返回文件操作標記的當前位置,以文件的開頭爲原點

   fp.next()                               # 返回下一行,並將文件操作標記位移到下一行。把一個file用於for … in file這樣的語句時,就是調用next()函數來實現遍歷的。

   fp.seek(offset[,whence])                # 將文件打操作標記移到offset的位置。whence可以爲0表示從頭開始計算,1表示以當前位置爲原點計算。2表示以文件末尾爲原點進行計算。

   fp.seekable()                           # 是否可以seek

   fp.truncate([size])                     # 把文件裁成規定的大小,默認的是裁到當前文件操作標記的位置。

   for line in open('data'):

       print(line)                       # 使用for語句,比較適用於打開比較大的文件

   open('f.txt', encoding = 'latin-1')     # Python3.x Unicode文本文件


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章