一、概述
在文件的读写操作中,python是相对容易学的,python对文件进行操作只需要使用open()创建一个file流对象,用这个对象对文件进行读和写操作。open()有两个参数,一个是url是必须的,一个是mode非必须的,不填默认为读文件。
二、示例
使用 open() 创建一个可以操作的文件对象,语法格式如下:
file = open('url',[mode='rt']) open() 有两个参数,url(必填) 和 mode(选填)
url : 填写一个要进行读操作的文件路径
mode:如下
+ | 打开一个文件进行更新(可读可写) |
t | 文本模式(默认) |
r | 以只读方式打开文件(默认) |
r+ | 打开一个文件用于读写。文件指针将会放在文件的开头 |
b | 二进制模式 |
rb | 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。一般用于非文本文件如图片等 |
rb+ | 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。一般用于非文本文件如图片等 |
w | 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件 |
wb | 以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等 |
w+ | 打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件 |
wb+ | 以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等 |
a | 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入 |
ab | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入 |
a+ | 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写 |
ab+ | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写 |
x | 写模式,新建一个文件,如果该文件已存在则会报错 |
1、 使用 open() 创建文件对象
file1 = open('../../python笔记1.txt')
# open : 一般填写两个参数,url 和 mode
# url : 填写一个要进行读操作的文件路径
# mode :
# r : 只读模式
# w : 文件不存在时创建文件进行写,文件存在则会覆盖文件原有数据进行写操作
# a : 打开文件见开始光标移动到末尾进行追加内容
# b : 二进制模式(可与读写模式一同使用)
# + : 可读可写模式 (可与其它的模式组合使用)
# 如果不填默认 : 以字符类型进行读操作
# 操作完有进行关闭流,我们向文件写数据时,数据会先放在缓存区内,当我们关闭文件流时,如果文件还未写完,缓存区内的数据会先写到文件中再关闭
file1.close()
2、文件的写操作 --> write()
file2 = open('../../python笔记2.txt', 'a') # 进行写操作
# .. 表示上一级目录
# 准备要写入的内容
write_test = '''
黄鹤楼送孟浩然之广陵
李白 唐
故人西辞黄鹤楼,烟花三月下扬州。
孤帆远影碧空尽,唯见长江天际流。
'''
count = file2.write(write_test) # 一次性写入 并且返回写入的字符数量
print(count) # ---> 64
file2.writelines(write_test) # 只有将带有格式的内容作为参数写入才会换行
file2.writelines([1,2,3,4,5,6,7]) # 将整个列表依次写入,不换行
file2.writelines('a\n','b\n','c\n') # 想要换行只能自己加上 \n
file2.close()
3、文件的读操作 --> read()
file3 = open('../../python笔记2.txt', 'r') # 进行读操作
date = file3.read() # 读取所有数据,读取完后光标在最后。 可填写size参数,读取size个字符
print(date)
date1 = file3.readline() # 每读取一行光标向下移动一行,当没有数据可读时返回空字符串。可填写size参数,读取size个字符
print(date1 + 'end')
date_list = file3.readlines() # 读取所有,以每行分隔为一个元素存储在列表中
print(date_list)
file3.close()
4、读取图片或者视频时,要使用 'rb' 参数,使用with时不不需要进行 colse(),程序会自动关闭
with open('文件操作/111.jpg', 'rb') as r_jpg:
with open('文件操作/111_1.jpg', 'wb') as w_jpg:
w_jpg.write(r_jpg.read())
print('copy完成')
# 通过二进制的方式,就可以对视频流或者图片流进行拷贝了
三、相关方法的介绍
file.stat() | 返回所有文件的属性 |
file.tell() | 返回文件当前位置 |
file.seek() | 移动文件读取指针到指定位置 |
file.flush() | 刷新文件,将缓冲区的数据立刻写到文件中 |
file.write() | 将字符串写入文件,返回写入的长度 |
file.listdir() | 返回path目录下的文件和目录列表 |
file.remove() | 删除指定的文件 |
file.rename() | 重写文件名或目录名 |
file.writelines() | 向文件写入一个序列字符串列表 |
file.read([size]) | 从文本读取指定字符,不填参数默认读取全部 |
file.readline([size]) | 一行一行的从文件中读取数据,不填参数表示读取所有 |
file.readlines([size]) | 读取所有,返回列表 |
四、自测题目
1、创建文件test.txt,文件一共1000行,每行存放一个区间在1~100之间的随机整数。
2、在当前目录新建一个目录 img ,里面包含100个后缀为 .png 的文件,100个文件名各不相同(由此list['1','2','3','4','5','a','b','c','d','e','f','g'] 随机组合排列为 XXXX.png)
3、将当前img目录所有以 .png 结尾的文件改为后缀为 .jpg
4、生成 100 个 MAC 地址并且写入到文件中,MAC地址前6位(16进制)为 01-AF-3B
例: 01-AF-3B-xx-xx-xx