文件操作 1.open()函數 open()函數主要用於文件處理,一般分為下麵3個過程: 1.打開文件 2.操作文件 3.關閉文件 常見的格式示例: 1.打開文件 常見的模式有: 1.‘r’,只讀 2.‘w’,只寫(當對打開執行只寫操作後,文件原內容將會被清空,註意備份) 3.‘a’,追加 "+" ...
文件操作
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 pass 106 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 before 113 the file on disk reflects the data written. 114 """ 115 pass 116 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 object 123 producing strings. This is equivalent to calling write() for each string. 124 """ 125 pass 126 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 performance 133 optimizations previously implemented in the xreadlines module. 134 """ 135 pass 136 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()