python基础09
5.2文件的读写
5.2.1读数据
(1)read
使用read(num)可以从文件中读取数据,num表示要从文件中读取的数据的长度(单位是字节),如果没有传入num,那么就表示读取文件中所有的数据
如果读了多次,那么后面读取的数据是从上次读完后的位置开始的
(2)readlines
就像read没有参数时一样,readlines可以按照行的方式把整个文件中的内容进行一次性读取,并且返回的是一个列表,包含换行符\n,其中每一行的数据为一个元素
(3)readline
每次读一行
5.2.2写数据write
使用write()可以完成向文件写入数据。如果文件不存在那么创建,如果存在那么就先清空,然后写入数据
5.3文件指针
(1)tell()
可用来显示文件指针的位置,字符数(windows系统中每行末尾会加上\r\n,(\r表示回行首,\n表示换行),但用read去读的时候只会读\n,不会读\r。
(2)seek()
seek(偏移量,whence) # 更改文件指针的位置
其中,偏移量在python3中是数字且仅能是正值,距离whence的字符数;whence可以取三个值:0:文件开头;1:当前位置;2:文件结尾
总结:文件指针操作都包含\r\n(Windows中),但读数据的时候只包含\n
5.4查看文件信息
print(f.name) #查看文件名
print(f.mode) #查看访问权限
print(f.encoding) #查看编码方式
print(f.closed) #检查文件是否关闭,返回True或者False
print(f.readable)
print(f.writeable)
5.5清空缓冲区(了解)
f.flush()
#清空缓冲区域(释放这个区域,将来可以分配任何数据),将缓冲区数据写入到硬盘
5.6操作目录(文件的相关操作)(os模块)
路径:相对路径(从当前位置出发)和绝对路径(以盘符出发)
文件的相关操作:
查看当前文件所在路径
import os
file_path = os.getcwd()
print(file_path)
查看某个路径下的所有文件—返回一个列表
list1 = os.listdir(r’C:\Users’) #./表示当前路径
print(list1)
#改变文件的操作路径
os.chdir(’…/’)#小括号里可以是任意想操作的路径
#创建单个文件夹
os.mkdir(‘aaa’)
#递归创建文件夹
os.makedirs(r’aaa\bbb\ccc’)
#删除ccc
os.rmdir(r’aaa\bbb\ccc’)
注意:os模块不允许递归删除(即:aaa不为空),想要递归删用shutil()(慎用)
import shutil
shutil.rmtree(r’aaa’)
#重命名rename(文件名,改成什么名字)
os.rename(‘原文件名’,‘要改成的名字’)
#删除文件1.txt
os.remove(‘1.txt’)
5.7文件批量重命名
把code文件夹的所有文件重命名为 daqiu…
把这个路径下的所有文件先查找到 – 遍历所有文件 :有一个新的名字daqiu… rename(旧,新)
import os
os.chdir(r"C:\Users\GZC\Desktop\new")
path = os.getcwd()
list1 = os.listdir(path)
print(list1)
for temp in list1:
newname = 'daqiu' + temp
os.rename(temp,newname)
#用切片法可以还原到原来的,如下:
import os
path = os.chdir(r'C:\Users\GZC\Desktop\new')
list1 = os.listdir(path)
print(list1)
for name in list1:
if name.startswith('daqiu'):
newname = name[5:]
os.rename(name,newname)
5.8备份任意文件
import os
file_list = os.listdir('./') #如果想备份其它地方的数据,需用到chdir()
print(file_list)
file_name = input('请输入要备份的文件名:')
if file_name in file_list:
index = file_name.rfind('.')
new_name = file_name[:index] + "_backup" + file_name[index:]
src_f = open(file_name, 'rb') # 音频文件,所以要二进制模式打开
new_f = open(new_name, 'ab')
while True:
# 找一个变量保存每次读取的数据
data = src_f.read(1024 * 1024)
if len(data) == 0:
break
new_f.write(data)
new_f.close()
src_f.close()
else:
print('文件不存在')