文件操作
-
-
答案是保存到硬盘里,那应用程序怎么直接操作硬件呢?这就需要了解一下计算机系统,计算机系统分为,计算机硬件、操作系统、应用程序三部分,操作系统会把硬件操作封装成简单的借口供应用程序调用,这样用户就可以通过应用程序将数据永久的保存在硬盘了。
-
-
python中操作文件的过程
# 打开一个文件,赋值给一个变量(拿到文件句柄) >>> f = open('a.txt',encoding='utf-8') # 读取文件 >>> f.read() '你好啊' # 关闭文件 >>> f.close() # 分析一下上面的操作过程 首先从硬盘读取文件读到内存 进行读取的操作 关闭文件
第一点:注意!!!# 资源回收包括操作系统打开的文件和应用系统的变量,操作完毕后一定要记得回收。 >>> f.close() # 关闭文件 >>> del f # 删除变量 # 关闭文件一定要在删除变量后边,否则会导致文件不关闭,白白的浪费内存资源。但是在python中应用系统的变量当你操作完后会进行自动回收,所以用户只需要进行关闭文件操作即可。 # 有些人会觉得这样操作起来会很麻烦,每次都需要记得关闭,接下来推荐一个非常简单的方法,利用with关键字来帮助管理上下文 >>> with open('a.txt',encoding='utf-8') as f: # as f相当于赋值变量 ... f.read() ... '你好啊'
第二点:注意!!!# 字符编码问题 1. 上边操作可以看到指定了encoding='utf-8',是操作这个文件的编码格式 2. 用什么编码格式写入一定要用什么编码格式打开,否则会出现问题
-
打开文件的模式
上图具体的用法
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# r: 读方式 (默认方式) # w: 写方式 (如果文件不存在会创建文件,如果文件存在会清空文件) >>> with open('a.txt','w',encoding=''utf-8) as f: ... f.write('你好吗,python') # r代表转义所有的意思,因为\n \r是由特殊意义的;也可以使用“\”行转义 # with open('C:\\Users\\Administrator\\Desktop\\a.txt',encoding='utf-8') as f: >>> with open(r'C:\Users\Administrator\Desktop\a.txt',encoding='utf-8') as f: ... f.read() ... '你好吗,python' # a: 追加方式 (如果文件不存在会报错,如果文件存在则追加到文件末尾) >>> with open(r'C:\Users\Administrator\Desktop\a.txt',encoding='utf-8') as f: ... f.read() ... '你好吗,python我很好' # 一下操作在编辑器中操作(sublime) 为什么内容会在一行呢?是因为python让我们自己写换行符 with open(r'C:\Users\Administrator\Desktop\a.txt','a',encoding='utf-8') as f: f.write('我不换行\n我换行了') with open(r'C:\Users\Administrator\Desktop\a.txt','r',encoding='utf-8') as f: f = f.read() print(f) 你好吗,python我很好我不换行 我换行了
# 如果要操作图片、视频这样格式的就要用到b模式,以字节的格式操作(所以的文件都是以字节的方式存储的),只用字节模式时不可以指定字符编码
b: 字节模式 rb wb ab
# 如果我既想读又想写怎么办?
使用 +实现可读可写
r+ w+ a+ with open(r'C:\Users\Administrator\Desktop\a.txt','r+',encoding='utf-8') as f: f.write('今天是周日\n') with open(r'C:\Users\Administrator\Desktop\a.txt','r+',encoding='utf-8') as f: f = f.read() print(f) 今天是周日
-
操作文件的方法
读文件 # f.read() (一次读取全部内容) with open(r'C:\Users\Administrator\Desktop\a.txt',encoding='utf-8') as f: f = f.read() print(f) 今天是周日 明天是周一 后天是周二 # f.readline() (一次读取一行) with open(r'C:\Users\Administrator\Desktop\a.txt',encoding='utf-8') as f: f1 = f.readline() f2 = f.readline() f3 = f.readline() print(f1,f2,f3) 今天是周日 明天是周一 后天是周二 # f.readlines() (读取每一行内容,生成一个列表) with open(r'C:\Users\Administrator\Desktop\a.txt',encoding='utf-8') as f: f = f.readlines() print(f) ['今天是周日\n', '明天是周一\n', '后天是周二'] 写文件 f.write() # 以文本格式写入 with open(r'C:\Users\Administrator\Desktop\a.txt','w',encoding='utf-8') as f: f.write('你好啊') f.write('你好啊',encode='utf-8') # 针对b模式的写入
-
文件的定位操作
-
read(3):
文件打开方式为文本模式时,代表读取3个字符
文件打开方式为b模式时,代表读取3个字节
-
seek,tell 方法都是以字节方式移动的
-
tell()方法告诉你文件内的当前位置, 换句话说,下一次的读写会发生在文件开头这么多字节之后
seek(offset [,from])方法改变当前文件的位置。Offset变量表示要移动的字节数。from变量指定开始移动字节的参考位置。
如果from被设为0,这意味着将文件的开头作为移动字节的参考位置。如果设为1,则使用当前的位置作为参考位置。如果它被设为2,那么该文件的末尾将作为参考位置
-
with open(r'C:\Users\Administrator\Desktop\a.txt',encoding='utf-8') as f: f1 = f.read(2) # 读取两个字符 t1 = f.tell() # 获取当前位置 t2 = f.seek(0,0) # 移动开开头 print('读取的两个字符: %s\n现在的位置: %s' % (f1,t1)) print(t2) 读取的两个字符: aa 现在的位置: 2 0
-