11_Python文件操作

一、文件操作的基本流程

计算机系统分为:计算机硬件,操作系统,应用程序三部分。

我们用python或其他语言编写的应用程序若想要把数据永久保存下来,必须要保存于硬盘中,这就涉及到应用程序要操作硬件,众所周知,应用程序是无法直接操作硬件的,这就用到了操作系统。操作系统把复杂的硬件操作封装成简单的接口给用户/应用程序使用,其中文件就是操作系统提供给应用程序来操作硬盘虚拟概念,用户或应用程序通过操作文件,可以将自己的数据永久保存下来。

有了文件的概念,我们无需再去考虑操作硬盘的细节,只需要关注操作文件的流程。

操作一个文件首先思考都需要哪些参数:

  1. 文件所在的路径,如:d:\test.txt
  2. 读取文件所使用的编码
  3. 操作方式:读、写、追加...
  4. 关闭文件,释放资源

读取d:\test.txt文件,保存格式utf-8:

#在Python中,我们通过open()获得一个文件句柄,然后我们利用文件句柄实现对文件的操作
f = open('d:\\test.txt',encoding='utf-8',mode='r')
content = f.read() #读取文件内容
f.close()
print(content)

二、文件编码

f=open(...)是由操作系统打开文件,那么如果我们没有为open指定编码,那么打开文件的默认编码很明显是操作系统说了算了,操作系统会用自己的默认编码去打开文件,在windows下是gbk,在linux下是utf-8。

#这就用到了上节课讲的字符编码的知识:若要保证不乱码,文件以什么方式存的,就要以什么方式打开。
f=open('a.txt','r',encoding='utf-8')

三、文件打开模式

文件句柄 = open(文件路径,操作方式,编码)

'''
1.对于文本文件的读取:
r:只读模式
w:只写模式
a:追加模式

2.对于非文本文件的读取:
rb:以二进制只读模式
wb:以二进制只写模式
ab:以二进制追加模式

3.+ 就是代表了功能增强
r+:以读写的模式打开
w+:以读写模式打开
a+:以读写模式打开

4.以bytes类型操作的模式
rb+/r+b 以二进制读写模式打开
wb+/w+b 以二进制读写模式打开
ab+/a+b 以二进制读写模式打开
'''
注:以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型,不能指定编码

四、文件操作方法

4.1常用操作方法

 1 #1.read() 整体读取出来
 2 f = open('d:\\test.txt',encoding='utf-8')#r可以省略
 3 content = f.read()
 4 print(content)
 5 
 6 #2.readline()读取一行
 7 f = open('d:\\test.txt',encoding='utf-8')
 8 line1 = f.readline()  #一次只读取一行内容
 9 line2 = f.readline()
10 print(line1)
11 print(line2)
12 
13 
14 #3.readlines() 读取,把每一行作为列表元素,返回一个列表
15 li = []
16 f = open('d:\\test.txt',encoding='utf-8')
17 li = f.readlines()
18 print(li)#['This is a file.\n', 'Python3 file Operate method.\n']
19 
20 #4.readable()
21 f = open('d:\\test.txt',encoding='utf-8')
22 l = f.readable() #是否可读
23 print(l)
24 
25 #5.读取大文件,如果一个文件为16G,远远超过了我们普通电脑的内存大小,怎么读
26 f = open('d:\\test.txt',encoding='utf-8')
27 for i in f:  #文件句柄,一行一行的读
28     print(i)
29 
30 #6.读取n个字符,     在rb模式下,按照字节读
31 f = open('d:\\test.txt',encoding='utf-8',mode='r')
32 content = f.read(3)
33 print(content)  #Thi  中华人
34 
35 # rb 模式下  不用 encoding='UTF-8'
36 f = open('d:\\test.txt',mode='rb')
37 content = f.read(3)
38 print(content) #b'\xe4\xb8\xad'
39 print(b'\xe4\xb8\xad'.decode('utf-8'))  #

4.2只写操作

1 f = open('d:\\test.txt',mode='w',encoding='utf-8')
2 if f.writable():  #判断文件是否可写
3     f.write('新内容') #如果文件存在,把原内容覆盖;如果文件不存在,创建文件,写入内容
4 if f.readable():  #不可以读,所以无打印
5     print(f.read())

4.3追加操作

1 f = open('d:\\test.txt',mode='a',encoding='utf-8')
2 if f.writable():#判断是否可写
3     f.write("追加的内容") #如果文件存在,在原内容后追加;如果文件不存在,创建文件,写入内容
4 if f.readable():#判断是否可读  ,不可读
5     f.read(f.read())

五、光标移动

seek()、tell()、truncate()光标移动都是以字节为单位的。

1. seek有三种移动方式0,1,2,其中1和2必须在b模式下进行,但无论哪种模式,都是以bytes为单位移动2. truncate是截断文件,所以文件的打开方式必须可写,但是不能用w或w+等方式打开,因为那样直接清空文件了,所以truncate要在r+或a或a+等模式下测试效果。

seek()

seek() 方法用于移动指针(文件读取指针)到指定位置。

tell()

truncate()

  

 

posted @ 2018-01-30 20:48  短毛兔  阅读(213)  评论(0编辑  收藏  举报