[Python笔记] 文件IO常用操作

@lianst  November 1, 2018

语法:

open(file,mode='r',buffering=-1,encoding=None,errors=None,newline=None,closefd=True,opener=None)

示例

创建一个文件est,然后打开它,用完之后关闭。

In [1]: f = open("test")                                                                                               
In [2]: f                                                                                                              
Out[2]: <_io.TextIOWrapper name='test' mode='r' encoding='UTF-8'>
In [3]: print(f.read())
                                                                                                
In [4]: f.close()                                                                                                      

文件操作中,最常用的操作就是读和写;
文件访问的模式有昂中:文本模式和二进制模式。不同模式下,操作函数不尽相同,表现的结果也不一样。

参数

file:打开或者要创建的文件名,如果不指定路径的话,默认就是当前路径。
mode模式:

描述字符意义
rread,缺省的,表示只读打开
wwrite,只写打开,文件不存在会创建,文件存在会清空内容
x创建并写入一个新的文件
aappend,写入打开,如果文件存在则追加
bbyter,二进制模式
ttext,缺省的,文本模式
+读写打开一个文件,给俺来只读、只写方式打开提供缺失的读或写能力

上述示例中,可以看到mode是没有写的,所以可以看到默认就是用文本打开的并且是只读。

r模式

r模式是只读打开文件,如果使用write方法,就会抛出异常。如果文件不存在。则抛出FileNotFoundError异常。

In [5]: f = open("test")  # 默认是只读                                                                                           

In [6]: f.read()                                                                                                     
Out[6]: ''

In [7]: f.write('abc')   # 只读模式是不能写的                                                                                            
---------------------------------------------------------------------------
UnsupportedOperation                      Traceback (most recent call last)
<ipython-input-7-3626d6c87fee> in <module>
----> 1 f.write('abc')

UnsupportedOperation: not writable

In [8]: f.close()     

In [9]: f = open("test",'r')   # 加上r模式,只读                                                                                     

In [10]: f.write('acss')    # r模式下是不能写的                                                                                        
---------------------------------------------------------------------------
UnsupportedOperation                      Traceback (most recent call last)
<ipython-input-10-458819baaf89> in <module>
----> 1 f.write('acss')

UnsupportedOperation: not writable

In [11]: f.close()  
In [12]: f = open("test1",'r')   # r模式下文件不存在会报错的                                                                                   
---------------------------------------------------------------------------
FileNotFoundError                         Traceback (most recent call last)
<ipython-input-12-d7916e348a93> in <module>
----> 1 f = open("test1",'r')

FileNotFoundError: [Errno 2] No such file or directory: 'test1'
      

w模式

w 模式表示只写方式打开文件,如果读取则会抛出异常;如果文件不存则则直接创建文件;如果文件存在,则清空文件内容。

In [1]: f = open('test','w')   # 以只写的方式打开test文件,文件不存在就创建,存在就清空。                                                                                     

In [2]: f.write('accc')   # 调用write方法写入                                                                                       
Out[2]: 4

In [3]: f.close()     # 关闭文件                                                                                         

In [4]: cat test     # 查看test文件内容,已经写入进去                                                                                               
accc
In [5]: f = open('test',mode='w')    # 以只写的方式打开test文件,文件已经存在并且有内容                                                                               

In [6]: f.close()      # 什么也不干,直接关闭                                                                                   

In [7]: cat test       # 查看文件,内容已经被清空了                                                                                      

In [8]: f = open('test1',mode='w')                                                                               

In [9]: f.write('123')                                                                                              
Out[9]: 3

In [10]: f.close()                                                                                                  

In [11]: cat test1                                                                                                  
123

x模式

x 模式文件不存在,就创建文件,并且以只写方式打开;若文件存在,则抛出FileExistsError异常。

In [12]: f = open('test2','x')  # 以x方式打开test2文件,不存在就创建,以只写方式打开                                                                               

In [13]: f.read()    # 读取报错                                                                                               
---------------------------------------------------------------------------
UnsupportedOperation                      Traceback (most recent call last)
<ipython-input-13-571e9fb02258> in <module>
----> 1 f.read()

UnsupportedOperation: not readable

In [14]: f.write('abdc')    # 写入正常                                                                                       
Out[14]: 4

In [15]: f.close()                                                                                                  

In [16]: cat test2                                                                                                  
abdc
In [17]: f = open('test2','x')    # test2文件已存在,以x模式打开报错                                                                               
---------------------------------------------------------------------------
FileExistsError                           Traceback (most recent call last)
<ipython-input-17-ba6940455994> in <module>
----> 1 f = open('test2','x')

FileExistsError: [Errno 17] File exists: 'test2'

a模式

a模式文件存在,以只写模式打开,追加内容;文件不存在,则创建后以只写模式打开,追加内容。

In [18]: f = open('test2','a')   # 以a模式打开test2文件                                                                                  

In [19]: f.read()    # 读取是报错的                                                                                               
---------------------------------------------------------------------------
UnsupportedOperation                      Traceback (most recent call last)
<ipython-input-19-571e9fb02258> in <module>
----> 1 f.read()

UnsupportedOperation: not readable

In [20]: f.write('accccc')   # 追加写入                                                                                       
Out[20]: 6

In [21]: f.close()                                                                                                  

In [22]: cat test2       # 查看test2文件                                                                                       
abdcaccccc
In [23]: f = open('test2','a')                                                                                      

In [24]: f.write('\n hello')                                                                                        
Out[24]: 7

In [25]: f.close()                                                                                                  

In [26]: cat test2                                                                                                  
abdcaccccc
 hello
In [27]: f = open('test3','a')    # 以a模式打开test3文件,文件不存在,则创建                                                                                

In [28]: f.write('test3')       # 写入正常                                                                                
Out[28]: 5

In [29]: f.close()  

r模式是只读,wxa模式都是只写。wxa都可以产生新的文件,w模式不管文件存在与否,都会生成全新内容的文件;a模式不管文件是否存在,都能在打开的文件尾部追加;x必须要求文件事先不存在,自己会创建一个新的。

t模式

t模式,顾名思义就是text。字符流,将文件的字节按照某种字符编码理解,按照字符操作。open默认的mode就是rt。

In [30]: f = open('test')                                                                                           

In [31]: f                                                                                                          
Out[31]: <_io.TextIOWrapper name='test' mode='r' encoding='UTF-8'>

b模式

b模式,字节流(bytes),将文件按照字节理解,与字符编码无关。二进制模式操作时,字节操作使用bytes类型。

In [33]: f = open('test','rb')                                                                                      

In [34]: f                                                                                                          
Out[34]: <_io.BufferedReader name='test'>
In [36]: cat test2                                                                                                  
abdcaccccc
 hello
In [37]: f = open('test2','rb')                                                                                     

In [38]: s = f.read()                                                                                               

In [39]: print(type(s))                                                                                             
<class 'bytes'>

In [40]: f.close()

In [41]: f = open('test3','wb')                                                                                     

In [42]: s = f.write(b"abcde")                                                                                      

In [43]: print(s)                                                                                                   
5

In [44]: s = f.write('连仕彤博客'.encode())                                                                         

In [45]: print(s)                                                                                                   
15

In [46]: f.close() 

+模式

+模式为r、w、a、x提供确实的读写功能,但是获取文件对象依旧按照r、w、a、x自己的特征;+不能单独使用,可以理解为它是为前面的模式字符做增强功能的。


添加新评论