文件操作②
二进制文件
open()方法里的mode参数:
- t 读取文本文件(默认值)
- b 读取二进制文件
通过改变mode参数对二进制文件进行操作
file_name = 'DD.jpg'
# 读取模式
# t 读取文本文件(默认值)
# b 读取二进制文件
# t b是和r w a 加在一起的,它们都是mode的参数
with open(file_name,'rb') as file_obj :
'''
读取图片DD.jpg的二进制代码,再写入到picture.jpg中
'''
# 读取文本文件时,size是以字符为单位的
# 读取二进制文件时,size是以字节为单位的
# print( file_obj.read(100) )
new_name = 'picture.jpg'
with open( new_name ,'wb' ) as new_obj :
chunk = 1024*100 # 每次读取的大小
while True :
content = file_obj.read(chunk) # 中间变量,存储读出来的信息
if not content :
# 读取为空,读取完毕
break
new_obj.write( content ) # 写入
文件读取位置
- seek( ) 和 tell( ) 方法调整、查看指针位置
# seek( )和tell( )
with open('demo.txt','rb') as file_obj :
# print( file_obj.read(100) )
# print( file_obj.read(20) )
# seek( offset[, whence] )方法可以修改当前读取(指针)的位置
# seek有两个参数:
# 第一个参数offset是相对于某个位置向后的偏移量,可以为负值,位置由第二个参数决定
# 第二个参数是计算位置方式
# whence=0(默认值),从开头向后;
# whence=1,从当前位置向后;
# whence=2,相对于文件末尾移动,通常offset取负值
file_obj.seek(10)
print( '当前指针在:',file_obj.tell() )
print( file_obj.read(3) )
file_obj.seek(20,1)
print( '当前指针在:',file_obj.tell() )
print( file_obj.read(3) )
file_obj.seek(-10,2)
print( '当前指针在:',file_obj.tell() )
print( file_obj.read(10) )
# tell( )方法可以用来查看当前读取(指针) 的位置
print( '当前指针在:',file_obj.tell() )
print('- '*20,'我是华丽的分割线',' -'*20)
# 读取中文时
with open('demo2.txt','rt',encoding = 'utf-8') as file_obj :
seek_size = 3
file_obj.seek(seek_size)
# seek_size是以字节为单位,一个完整中文是三个字节,
# 所以必须为保证文字的完整,否则会报错
read_size = 2
print( file_obj.read(read_size) )
# 因为此时读取的是文本文件('rt',t是文本文件),
# 所以read_size是以字符为单位,一个中文就是一个字符
print( '当前指针在:',file_obj.tell() )
# 此时指针位置为9,3+2*3=9
文件的其他操作
- listdir()返回目录信息
- getcwd( )获得目录信息
- chdir( ) 切换到目录
- mkdir( )创建目录
- remove( ) 删除目录
- rename( )重命名和移动一个文件的路径
import os
from pprint import pprint
# 从 pprint 模块中引入 pprint 方法
# os.listdir( path = '.' )
# 需要一个路径作为参数,会获取该路径下的目录结构,默认值是当前目录,
# 返回一个目录结构的列表,每一个文件(夹)都是表中的一个元素
r = os.listdir( )
pprint( r )
# os.getcwd( ) 获取当前所在目录
r = os.getcwd( )
print( r )
# os.chdir( path ) 切换当前所在目录
# 需要一个路径作为参数,会切换到该路径下
os.chdir('..') # 去到上级目录
r = os.getcwd( )
print( r )
# os.mkdir('path\\name') 创建目录(文件夹)
# 参数如果直接是文件夹名,就会在当前目录下创建
# 也可以是路径+文件夹名,指定路径下创建
os.mkdir('aa')
os.mkdir('06.异常和文件/aa')
# os.remove( ) 删除目录
# 参数同上
os.rmdir('aa')
os.rmdir('06.异常和文件/aa')
os.chdir('06.异常和文件')
# 先回到 06.异常和文件目录下
open('a.txt','x' ) # 创建a.txt文件
# os.remove( ) 删除文件
# 参数都可以是路径+文件名
os.remove('a.txt')
# os.rename('旧名字','新名字') 可以重命名和移动一个文件路径
# 两个参数都可以是路径+文件名
# open('aa.txt','x' )
os.rename('aa.txt','bb.txt')