使用 Python 访问文件,首先得先打开文件,在 Python 下打开文件能够使用 open 内置函数python
openide
r——以只读方式打开
w——以写的方式打开
a——以追加模式打开
r+——以读写模式打开
w+——以读写模式打开(参见w)
a+——以读写模式打开(参见a)
rb——以二进制读模式打开(binary)
wb——以二进制写模式打开(参见w)
ab——以二进制追加模式打开(参见a)
rb+——以二进制读写模式打开(参见r+)
wb+——以二进制读写模式打开(参见w+)
ab+——以二进制读写模式打开(参见a+)函数
with openspa
咱们试着打开一个文件以下:code
In [1]: open('/tmp/tmp.txt') Out[1]: <open file '/tmp/tmp.txt', mode 'r' at 0x1ba6150> In [2]: fd=open('/tmp/tmp.txt') #用一个参数fd接收一下 In [3]: type(fd) #能够看到fd是文件类型 Out[3]: file
文件会有不少方法能够使用,好比 fd.close,打开一个文件也须要关闭它:对象
In [4]: fd. fd.close fd.flush fd.next fd.seek fd.writelines fd.closed fd.isatty fd.read fd.softspace fd.xreadlines fd.encoding fd.mode fd.readinto fd.tell fd.errors fd.name fd.readline fd.truncate fd.fileno fd.newlines fd.readlines fd.write In [5]: fd.close() #关闭文件
而后咱们再已读写的方式打开以前那个文件:内存
In [6]: fd=open('/tmp/tmp.txt','w') #以读写的方式打开这个文件 In [7]: fd Out[7]: <open file '/tmp/tmp.txt', mode 'w' at 0x1ba6270> In [8]: fd.wri fd.write fd.writelines In [8]: fd.write("a") #往文件里面写入一个a,在这个时候会覆盖文件原有的内容 In [9]: fd.clo fd.close fd.closed In [9]: fd.close() 接着咱们关闭这个文件
接着咱们以读写的方式写入一个“123”,而后再往文件里面追加一个“456”:字符串
In [10]: fd=open('/tmp/tmp.txt','w') In [11]: fd.write("123\n") In [12]: In [12]: fd.close() In [13]: In [13]: fd=open('/tmp/tmp.txt','a') In [14]: fd.write("456\n") In [15]: fd.close()
文件内容变化以下:it
[root@izj6cdhdoq5a5z7lfkmaeaz ~]# cat /tmp/tmp.txt 123 [root@izj6cdhdoq5a5z7lfkmaeaz ~]# [root@izj6cdhdoq5a5z7lfkmaeaz ~]# cat /tmp/tmp.txt 123 456
以只读模式打开文件以下:class
In [16]: fd=open('/tmp/tmp.txt','r') In [17]: fd.read() Out[17]: '123\n456\n' In [18]: fd.read() '''由于读取第二遍的时候是日后读取的, 后面没有内容,因此返回的就是空的''' Out[18]: '' In [19]: fd.read() Out[19]: ''
read方法的比较:
In [19]: fd.read() #返回的是一个字符串 Out[19]: '' In [20]: fd.readline() #返回的是一个字符串 Out[20]: '' In [21]: fd.readlines() #返回的是一个列表 Out[21]: []
咱们把打开一个文件的操做脚本写入一个文件:
[root@izj6cdhdoq5a5z7lfkmaeaz ~]# cat openfile.py #!/usr/local/python3/bin/python fd=open("/tmp/tmp.txt") for i in fd.readlines(): print(i) [root@izj6cdhdoq5a5z7lfkmaeaz ~]# [root@izj6cdhdoq5a5z7lfkmaeaz ~]# python openfile.py 123 456 [root@izj6cdhdoq5a5z7lfkmaeaz ~]#
由上面咱们能够看到打开文件内容默认会显示空行,咱们去掉空行,以下所示:
[root@izj6cdhdoq5a5z7lfkmaeaz ~]# cat openfile.py #!/usr/local/python3/bin/python fd=open("/tmp/tmp.txt") for i in fd.readlines(): print(i,end='') [root@izj6cdhdoq5a5z7lfkmaeaz ~]# [root@izj6cdhdoq5a5z7lfkmaeaz ~]# [root@izj6cdhdoq5a5z7lfkmaeaz ~]# [root@izj6cdhdoq5a5z7lfkmaeaz ~]# python openfile.py 123 456 [root@izj6cdhdoq5a5z7lfkmaeaz ~]#
咱们通常建议在实际读取文件的时候去掉 read 方法,由于当文件很是大的时候,读取出来将消耗很大一部分的内存,通常直接进行以下代码便可:
[root@izj6cdhdoq5a5z7lfkmaeaz ~]# cat openfile.py #!/usr/local/python3/bin/python fd=open("/tmp/tmp.txt") for i in fd: #这样遍历的就是一个对象,对象会一行一行的取值读出来 print(i,end='') [root@izj6cdhdoq5a5z7lfkmaeaz ~]# [root@izj6cdhdoq5a5z7lfkmaeaz ~]# [root@izj6cdhdoq5a5z7lfkmaeaz ~]# python openfile.py 123 456 [root@izj6cdhdoq5a5z7lfkmaeaz ~]#