13 - 文件操作
一.文本文件和二进制文件
- 文本文件:广义上讲文本文件属于二进制文件,但是狭义上讲,就是那种我们能看得懂的文字符号组成的文件
- 如:txt等类型文件
- 二进制文件:内容为二进制0,1组成
- 如:图片,视频,文本,音乐等类型文件
二.读与写的理解
-
区分读与写需要指明参照对象
比如:
-
pycharm 将文件内容读入到pycharm中
-
pycharm 将某内容写出到文件中
-
文件上传:将电影读入到网盘中,然后网盘将电影写出到网盘的服务器中
-
文件下载:互联网将网盘中的内容读入,再通过互联网将内容写出到对方的电脑中
-
-
针对纯文本文件最方便使用 r,w (也可以使用rb,wb)
-
针对二进制文件使用 rb,wb
三.文件的打开与关闭
-
打开文件:open(文件路径,访问模式),返回值为stream对象
f = open(r'E:\test.txt', 'w')如果不想在字符串中使用转义字符,可路径字符串前加 r
注意:open中的文件路径只能最终定位到文件,不能是文件夹
文件路径的说明:
文件的路径分为相对路径和绝对路径两种。
- 绝对路径:指的是绝对位置,完整地描述了目标的所在地,所有目录层级关系是一目了然的。
- 例如:
C:/Users/chris/AppData/Local/Programs/Python/Python37/python.exe,从电脑的盘符开始,表示的就是一个绝对路径。
- 例如:
- 相对路径:是从当前文件所在的文件夹开始的路径。
test.txt,是在当前文件夹查找test.txt文件./test.txt,也是在当前文件夹里查找test.txt文件,./表示的是当前文件夹。../test.txt,从当前文件夹的上一级文件夹里查找test.txt文件。../表示的是上一级文件夹demo/test.txt,在当前文件夹里查找demo(同级)这个文件夹,并在这个文件夹里查找test.txt文件。
访问模式的说明:
访问模式 说明 r 以只读方式打开文件。文件的指针将会放在文件的开头。如果文件不存在,则报错。这是默认模式。 w 打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 a 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 r+ 打开一个文件用于读写。文件指针将会放在文件的开头。 w+ 打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 a+ 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。 rb 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。 wb 以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 ab 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 rb+ 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。 wb+ 以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 ab+ 以二进制格式打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。 rt python在读取文本时会自动把\r\n转换成\n,文本文件用二进制读取用‘rt’; - 绝对路径:指的是绝对位置,完整地描述了目标的所在地,所有目录层级关系是一目了然的。
-
关闭文件:close( )
# 新建一个文件,文件名为:test.txt f = open('test.txt', 'w') # 关闭这个文件 f.close()
四.文件的读写操作
- 对打开文件返回的流对象进行读写操作,即要先open指定对象和权限,再进行读写操作
读文件方法总结
-
read():无参表示读取所有内容,有参数num表示要从文件中读取的数据的长度(单位是字节)
stream = open(r'E:\aa.txt','r') file = stream.read() print(file) stream.close()读文件时报错:
UnicodeDecodeError: 'gbk' codec can't decode byte 0xa6 in position 8: illegal multibyte sequence解决办法1:使用
rb的访问模式读文件。但是显示的形式为十六进制解决办法2:指定使用的字符集
open('article.txt','r',encoding='UTF-8')。正常显示 -
readline():每次读取一行内容
stream = open(r'E:\aa.txt', 'r') while True: file2 = stream.readline() print(file2) if not file2: break stream.close() -
readlines():读取所有的行保存到列表中
stream = open(r'E:\aa.txt','r') file = stream.readlines() print(file) # ['第一句话\n', '第二句话\n', '第三句话'] for i in file: print(i) #注意格式问题:readlines读取一行的内容,一行结束会有\n符号,而print打印后也有换行符,所以就相当于打印一行再空一行再打印一行 stream.close()
-
readable():判断是否可读
注意:对一个流对象只能做一次读操作,不能说read()后又做一次readline()
写文件方法总结
-
write(内容):如果权限为'w',每次都会将原来的内容清空,然后写当前的内容;如果为'a',则会追加
-
writelines(可迭代的内容):没有换行的效果,想换行需要自己去加
stream = open(r'E:\aa.txt','w') #stream = open(r'E:\aa.txt','a') file = stream.writelines(['第一句话','第二句话','第三句话']) #第一句话第二句话第三句话 file = stream.writelines(['第一句话\n','第二句话\n','第三句话']) #有换行了 stream.close()
with关键字的使用
-
当离开 with 代码块的时候,系统会自动调用 f.close() 方法,不用手动的去关闭了
#文件的复制 import os with open(r'e:\aa.txt','r') as rstream: s = rstream.read() path = os.path.dirname(__file__) #__file__表示当前属性,得到当前文件所在路径,但是定位到的是文件夹,不能作为open的参数;只能是文件。 print(path) result = os.path.join(path,'aa.txt') #调用os模块下的path下的join方法得到一个文件路径 with open(result,'w') as wstream: wstream.write(s) print('复制成功')
os是python系统自带的模块,有点类似于java的包,os模块下的path,是对操作系统的路径的一些操作,比如dirname,join都是一些方法,下面具体讲讲常用的os模块下的方法
五.os模块下的常用方法
os下的常用方法
- os.getcwd():获取当前文件的工作目录
- listdir():返回指定目录下的所有文件和文件夹,保存到列表中
- mkdir():在给定路径下创建文件夹
- rmdir():只能删除空的文件夹
- remove():删除文件
- chdir(path):进入指定文件夹,类似于cd
#删除指定目录--先删除目录下的内容,再删除目录
import os
path = r'E:\p3'
filelist = os.listdir(path) #将path路径下的内容返回到列表中 ['aa.txt', 'bb.txt', 'dd.docx']
print(filelist)
for file in filelist:
path1 = os.path.join(path,file) #拼接一下返回该文件的绝对路径
os.remove(path1)
else:
os.rmdir(path)
print('删除成功')
os.path下的常用方法
-
dirname():获取指定文件的工作目录,与
dirname(__file__)连用表示获取当前文件的所在目录 -
join():在前面的路径上去拼接子路径或者文件
result = os.path.join(os.getcwd(),'file1','a.png') #可以有多个 #返回结果:E:\PythonLearn\PycharmProjects\pythonProject\day01\file1\a.png #...\day01是当前py文件的工作路径,然后拼接子文件夹,最后一个参数为文件 -
split():可以得到文件的文件名,分割成(文件目录,文件名)
result = os.path.join(os.getcwd(),'file1','a.png') result1 = os.path.split(result) #只要随便填一个绝对路径就行 print(result1) #('E:\\PythonLearn\\PycharmProjects\\pythonProject\\day01\\file1', 'a.png') 结果为元组,进行元组相关操作即可得到文件名 -
splitext():可以得到文件的拓展名,分割成(文件目录\文件名,文件的扩展名)
result2 = os.path.splitext(result) print(result2) #('E:\\PythonLearn\\PycharmProjects\\pythonProject\\day01\\file1\\a', '.png') -
getsize():得到文件的大小 (字节为单位)
-
isabs():判断是一个绝对路劲吗
-
isfile():判断是一个文件吗
-
isdir():判断是一个文件夹吗
-
exists():判断给定的路径或文件夹是否存在

浙公网安备 33010602011771号