[python拾遺]檔案操作,
檔案操作1.open()函數
open()函數主要用於檔案處理,一般分為下面3個過程:
1.開啟檔案
2.操作檔案
3.關閉檔案
常見的格式樣本:
f = open('note.txt','r')f.read()f.close() 1.開啟檔案
檔案控制代碼 = open('檔案路徑','模式')
常見的模式有:
1.‘r’,唯讀
2.‘w’,唯寫(當對開啟執行唯寫操作後,檔案原內容將會被清空,注意備份)
3.‘a’,追加
"+" 表示可以同時讀寫某個檔案
1.‘r+’
2.‘w+’
3.‘a+’
“b”表示處理二進位檔案
1.‘rb’,‘rb+’
2.‘wb’,‘wb+’
3.‘ab’,‘ab+’
"U"表示在讀取時,可以將 \r \n \r\n自動轉換成 \n (與 r 或 r+ 模式同使用)
1.‘rU’
2.‘r+U’
2.操作檔案 1 class file(object) 2 def close(self): # real signature unknown; restored from __doc__ 3 關閉檔案 4 """ 5 close() -> None or (perhaps) an integer. Close the file. 6 7 Sets data attribute .closed to True. A closed file cannot be used for 8 further I/O operations. close() may be called more than once without 9 error. Some kinds of file objects (for example, opened by popen()) 10 may return an exit status upon closing. 11 """ 12 13 def fileno(self): # real signature unknown; restored from __doc__ 14 檔案描述符 15 """ 16 fileno() -> integer "file descriptor". 17 18 This is needed for lower-level file interfaces, such os.read(). 19 """ 20 return 0 21 22 def flush(self): # real signature unknown; restored from __doc__ 23 重新整理檔案內部緩衝區 24 """ flush() -> None. Flush the internal I/O buffer. """ 25 pass 26 27 28 def isatty(self): # real signature unknown; restored from __doc__ 29 判斷檔案是否是同意tty裝置 30 """ isatty() -> true or false. True if the file is connected to a tty device. """ 31 return False 32 33 34 def next(self): # real signature unknown; restored from __doc__ 35 擷取下一行資料,不存在,則報錯 36 """ x.next() -> the next value, or raise StopIteration """ 37 pass 38 39 def read(self, size=None): # real signature unknown; restored from __doc__ 40 讀取指定位元組資料 41 """ 42 read([size]) -> read at most size bytes, returned as a string. 43 44 If the size argument is negative or omitted, read until EOF is reached. 45 Notice that when in non-blocking mode, less data than what was requested 46 may be returned, even if no size parameter was given. 47 """ 48 pass 49 50 def readinto(self): # real signature unknown; restored from __doc__ 51 讀取到緩衝區,不要用,將被遺棄 52 """ readinto() -> Undocumented. Don't use this; it may go away. """ 53 pass 54 55 def readline(self, size=None): # real signature unknown; restored from __doc__ 56 僅讀取一行資料 57 """ 58 readline([size]) -> next line from the file, as a string. 59 60 Retain newline. A non-negative size argument limits the maximum 61 number of bytes to return (an incomplete line may be returned then). 62 Return an empty string at EOF. 63 """ 64 pass 65 66 def readlines(self, size=None): # real signature unknown; restored from __doc__ 67 讀取所有資料,並根據換行儲存值列表 68 """ 69 readlines([size]) -> list of strings, each a line from the file. 70 71 Call readline() repeatedly and return a list of the lines so read. 72 The optional size argument, if given, is an approximate bound on the 73 total number of bytes in the lines returned. 74 """ 75 return [] 76 77 def seek(self, offset, whence=None): # real signature unknown; restored from __doc__ 78 指定檔案中指標位置 79 """ 80 seek(offset[, whence]) -> None. Move to new file position. 81 82 Argument offset is a byte count. Optional argument whence defaults to 83 (offset from start of file, offset should be >= 0); other values are 1 84 (move relative to current position, positive or negative), and 2 (move 85 relative to end of file, usually negative, although many platforms allow 86 seeking beyond the end of a file). If the file is opened in text mode, 87 only offsets returned by tell() are legal. Use of other offsets causes 88 undefined behavior. 89 Note that not all file objects are seekable. 90 """ 91 pass 92 93 def tell(self): # real signature unknown; restored from __doc__ 94 擷取當前指標位置 95 """ tell() -> current file position, an integer (may be a long integer). """ 96 pass 97 98 def truncate(self, size=None): # real signature unknown; restored from __doc__ 99 截斷資料,僅保留指定之前資料100 """101 truncate([size]) -> None. Truncate the file to at most size bytes.102 103 Size defaults to the current file position, as returned by tell().104 """105 pass106 107 def write(self, p_str): # real signature unknown; restored from __doc__108 寫內容109 """110 write(str) -> None. Write string str to file.111 112 Note that due to buffering, flush() or close() may be needed before113 the file on disk reflects the data written.114 """115 pass116 117 def writelines(self, sequence_of_strings): # real signature unknown; restored from __doc__118 將一個字串列表寫入檔案119 """120 writelines(sequence_of_strings) -> None. Write the strings to the file.121 122 Note that newlines are not added. The sequence can be any iterable object123 producing strings. This is equivalent to calling write() for each string.124 """125 pass126 127 def xreadlines(self): # real signature unknown; restored from __doc__128 可用於逐行讀取檔案,非全部129 """130 xreadlines() -> returns self.131 132 For backward compatibility. File objects now include the performance133 optimizations previously implemented in the xreadlines module.134 """135 pass136 137 Python 2.xpython2操作檔案 1 class TextIOWrapper(_TextIOBase): 2 """ 3 def close(self, *args, **kwargs): # real signature unknown 4 關閉檔案 5 pass 6 7 def fileno(self, *args, **kwargs): # real signature unknown 8 檔案描述符 9 pass 10 11 def flush(self, *args, **kwargs): # real signature unknown 12 重新整理檔案內部緩衝區 13 pass 14 15 def isatty(self, *args, **kwargs): # real signature unknown 16 判斷檔案是否是同意tty裝置 17 pass 18 19 def read(self, *args, **kwargs): # real signature unknown 20 讀取指定位元組資料 21 pass 22 23 def readable(self, *args, **kwargs): # real signature unknown 24 是否可讀 25 pass 26 27 def readline(self, *args, **kwargs): # real signature unknown 28 僅讀取一行資料 29 pass 30 31 def seek(self, *args, **kwargs): # real signature unknown 32 指定檔案中指標位置 33 pass 34 35 def seekable(self, *args, **kwargs): # real signature unknown 36 指標是否可操作 37 pass 38 39 def tell(self, *args, **kwargs): # real signature unknown 40 擷取指標位置 41 pass 42 43 def truncate(self, *args, **kwargs): # real signature unknown 44 截斷資料,僅保留指定之前資料 45 pass 46 47 def writable(self, *args, **kwargs): # real signature unknown 48 是否可寫 49 pass 50 51 def write(self, *args, **kwargs): # real signature unknown 52 寫內容 53 pass 54 55 Python 3.xpython3操作檔案
但其實常用的操作也就那幾個:
f.read(3) # python2中表示指定讀取3個位元組,python3中表示指定讀取3個字元!f.readline() # 讀取檔案內容中的一行f.readlines() # 自動將檔案內容解析為一個< 行的列表 >,可以用 for line in f.readlines(): 處理f.write('helloPython')f.seek(9) # 按照位元組來執行,用來指定當前檔案指標位置,seek(0)表示檔案指標移到檔案頭,seek(0,2)指向檔案尾,便於追加內容f.tell() # 是按照位元組來執行的,用來查看當前指標位置
還有一個truncate()函數,用於截斷檔案內容且僅保留檔案內容截斷處之前的內容,不容易理解可以看樣本:
f = open('test.log','r+',encoding='utf-8')# encoding='utf-8',有處理漢字的時候這樣用f.seek(9)# 原檔案內容是‘小蘋果helloPython’f.truncate()#執行truncate()後,僅保留原檔案截斷之前的內容,這裡即為‘小蘋果’f.close()2.with語句
上面利用open()函數進行檔案處理時,必須在檔案開啟進行操作後執行f.close()關閉檔案,十分的麻煩。而使用with()語句則可以避免這一步繁瑣的操作,自動在檔案操作後關閉檔案。並且,在python中引入with語句的目的是在異常處理中把try,except和finally關鍵字,以及與資源分派釋放相關的代碼全部去掉,從而減少代碼的編寫量,使代碼更簡潔!
如:
with open('name.txt', 'w') as f: f.write('Somebody^Fancy1')
等價於:
try: f = open('name.txt','w') f.write('Somebody^Fancy1')finally: if f: f.close()