python-文件操作
1、打开文件 f=open('XX',encoding='utf-8') #python字符集为unicode, encoding='utf-8' 避免发生错误
打开的三种方式:r读、w写和a追加
open() 第二参数为打开方式,默认为读
open('XX','w',encoding='utf-8') w读模式,会清除原有文件内容,w模式 可以写入,不能读即不能f.read()
open('XX','w+',encoding='utf-8') w+ 写读模式,文件不存在不会报错,会清空原有文件内容,可读、可写
open('XX','r',encoding='utf-8') r只读模式,文件不存在会报错,可以读,但是不能写入,文件指针在最后
open('XX','r+',encoding='utf-8') r+,读写模式,,文件不存在打开会报错,可读、可写
open('XX','a',encoding='utf-8') a追加模式,文件不存在时不报错,可以写入,且不清空之前内容,但是不能读取
open('XX','a+',encoding='utf-8') a追加读写模式,文件不存在时不报错,可以写入,且不清空之前内容,也可以读取,但是文件指针在最后,如果需要读取需要更改文件光标
可以打开图片 和视频 音频等文件
open('XX','rb') #bytes 以二进制方式打开
open('XX','wb')
open('XX','ab')
例如:###############################从网上下载一个图片代码
# import requests #requests 非标准包,需要安装
# url='xxxx' #图片的地址
# img=requests.get(url).content
# f=open('xxxx','wb') #文件名
# f.write(img)
##################################### 直接打开图片文件代码
# f=open('121.png','rb')
2、读取: print(f.read()) #即可读取文件的全部内容,返回字符串
f.readline() #读取文件的一行内容,返回的是字符串
f.readlines() #读取文件的所有内容,将每行内容放入list,每个元素为每行数据
3、关闭: f.close() #关闭文件
4、写入文件: f.write(X) 写入时,X 必须为字符串
f.writelines(X) 写入时, X可以是可循环的数据类型,例如list 、字符串、元组 ,即写入时 时做了循环操作
write 写入字符串时 , 效率高 直接写入
writelines, 写入字符串 效率低, 会做循环操作
5、修改文件指针 f.seek(0) 即将指针修改为0 ,即文件开始, 只针对读 管用,对写不管用,即写永远在最后
6、清空文件数据 f.truncate() #清空文件内容
7、查看当前文件指针位置 f.tell()
8、高效处理文件方法:
#直接循环文件对象的话,就是循环文件里面的每一行
for f in fw:
9、with 方法, 自动关闭文件,即无需 手动关闭
with open(‘a.txt’,‘w’) as xxx: #xxx即为自己定义的文件变量,即上述 定义的f
xxx.write('hhhh')
打开多个文件:
with open(‘a.txt’,‘w’) as xxx1,open('b.txt','w')as xxx2:
xxx1.write('hhhh')
xxx2.write('yyyy')
10、文件立即生效:
程序执行从头向下执行,会先存在缓冲区,等缓冲区满之后再写入磁盘中
如果想立即生效,可以调用f.flush() 则会立即写入磁盘,即程序立即生效
11、文件修改:
两种方法:
文件修改方法一,不适用于大文件,方法比较笨
# with open('geci','a+',encoding='utf-8') as f:
# f.seek(0)
# all=f.read() #问津指针在最后
# new_all=all.replace('二','一')
# f.seek(0)
# f.truncate()
# f.write(new_all)
# f.flush()
#文件修改方法2
# import os
# # with open('geci', 'a+', encoding='utf-8') as f,open('geci.bak','w')as f2: #定义一个临时文件
# # f.seek(0)
# with open('geci',encoding='utf-8') as f, open('geci.bak', 'w')as f2:
# for line in f: #直接循环文件则循环的是文件的每一行
# new_line=line.replace('1','8') #一行一行进行清空时, 指针已经在第一行下,不好直接清空,
# f2.write(new_line) # 因此再定义一个新文件
# os.remove('geci')
# os.rename('geci.bak','geci')

浙公网安备 33010602011771号