2022.11.11/12/14/15
1.编码格式介绍
# encoding=gbk
# 1.编码格式的介绍 # 上面是修改python文件的编码格式(要在第一行写) python文件默认编码格式UTF-8
print('你好,中国')
2.文件的读写原理
# 2.文件的读写原理
file=open('a.txt','r') # r是读的意思 赋给file变量 如此,磁盘上的文件就创建了在python上的对象
print(file.readlines()) # 读取文件中所有内容 结果是一个列表 把读取到两行的内容放到了一个列表中-->['中国\n', '美丽']
file.close() # 关闭系统资源
a:
中国
美丽
3.常用的文件打开模式:r、w、a、b、+
# 3.常用的文件打开模式
'''r 只读模式'''
file=open('a.txt','r') # r是读的意思 赋给file变量 如此,磁盘上的文件就创建了在python上的对象
print(file.readlines()) # 读取文件中所有内容 结果是一个列表 把读取到两行的内容放到了一个列表中-->['中国\n', '美丽']
file.close() # 关闭系统资源
'''w 只写模式'''
file=open('b.txt','w') # w是写的意思 b.txt在磁盘上是没有的
file.write('python')
file.close()
'''a 追加方式'''
file=open('b.txt','a')
file.write('python')
file.close()
'''b 二进制方式'''
src_file=open('totoro.png', 'rb') # 读二进制文件
target_file=open('copytotoro.png','wb') # 写二进制文件
target_file.write(src_file.read()) # 读取完全部内容之后把全部内容写进去
target_file.close() # 关闭操作
src_file.close()
a:
中国
美丽
4.文件对象常用的方法
# 4.文件对象常用的方法
file=open('a.txt','r')
print(file.read(2)) # 读取2个字符 中国 print(file.read())就是读取全部内容
file.close()
file=open('a.txt','r')
print(file.readline()) # 读一行 中国
file.close()
file=open('a.txt','r')
print(file.readlines()) # 输出一个列表,把每一行内容都作为列表中内容 ['中国\n', '美丽']
file.close()
file=open('c.txt','a')
file.write('hello')
file.close()
file=open('c.txt','a')
lst=['java','go','python']
file.writelines(lst)
file.close()
file=open('a.txt','r')
file.seek(2) # seek(2)跳过了中,从国开始读--一个中文占2个字节 seek(1)报错
print(file.read())
file.close()
file=open('c.txt','r')
file.seek(2)
print(file.read())
print(file.tell()) # 返回文件指针的当前位置 (这里加上跳过的两个) 第一个是0,从0开始
file.close()
file=open('d.txt','a')
file.write('hello')
file.flush() # 把缓冲区的内容写入文件,但不关闭文件
file.write('world')
file.close() # flush之后可以继续写内容,但close之后不允许继续写代码
'''file=open('d.txt','a')
file.write('hello')
file.close()
file.write('world')
file.flush() 报错'''
5.with语句(上下文管理器)
# with语句(上下文管理器)
with open('a.txt','r') as file: # 以只读模式打开文件,起别名
print(file.read()) # 不用手动关闭,当离开with语句时,会自动释放资源
'''open('a.txt','r')称为上下文表达式,这句话——open('a.txt','r')的对象就是上下文管理器'''
print(type(open('a.txt','r'))) # <class '_io.TextIOWrapper'>
'''TextIOWrapper曾经实现过enter、exit方法,所以这个类的对象open('a.txt','r')称为上下文管理器'''
'''MyContentMgr实现了特殊方法__enter__(),__exit__(),称该类对象遵守了上下文管理器协议
该类对象的实例对象,称为上下文管理器,如MyContentMgr()'''
class MyContentMgr(object):
def __enter__(self):
print('enter方法被调用执行了')
return self
def __exit__(self, exc_type, exc_val, exc_tb):
print('exit方法被调用执行了')
def show(self):
print('show方法被调用执行了')
with MyContentMgr() as file: # 相当于file=MyContentMgr
file.show() # 通过对象名调用show方法
'''缩进里面的都称为with语句体,当with语句体执行完毕会自动跳出上下文管理器,调用exit方法'''
'''即(正常情况):enter方法被调用执行了
show方法被调用执行了
exit方法被调用执行了
产生异常也会调用exit方法:enter方法被调用执行了
exit方法被调用执行了
上下文管理器中,无论是否产生异常都会调用特殊方法exit退出 退出被称为自动关闭资源'''
with open('totoro.png','rb') as src_file: # open('totoro.png','rb')被称为上下文表达式,结果为上下文管理器,被赋给变量src_file存储
with open('copy2totoro.png','wb') as target_file: # with语句体
target_file.write(src_file.read()) # 这里的意思是读什么就写什么
'''文件的复制,无需手动写关闭'''
6.目录操作
①os模块
# os模块-与操作系统相关的一个模块
import os
'''os.system('notepad.exe') # 打开记事本(调用命令)
os.system('calc.exe') # 调用计算器(调用命令)
# 直接调用可执行文件
os.startfile("C:\\Program Files (x86)\\Tencent\\QQ\\Bin\\QQScLauncher.exe")'''
②os模块操作目录相关函数
# os模块操作目录相关函数
import os
print(os.getcwd()) # 返回当前的工作目录 F:\桌面\python程序设计\python.01\chap15
lst = os.listdir('../chap15') # 返回指定路径下的文件和目录信息 ../--退到上级目录
print(lst) # 输出了chap15中所有文件
# os.mkdir('newdir2') # 创建目录
# os.makedirs('A/B/C') # 创建多级目录
# os.rmdir('newdir2') # 删除目录
# os.removedirs('A/B/C') # 删除多级目录
os.chdir('F:\桌面\python程序设计\python.01\chap15') # 将path设置为当前工作目录
print(os.getcwd())
③os.path模块操作目录相关函数
# os.path模块操作目录相关函数
import os.path
print(os.path.abspath('sixty-second.py')) # F:\桌面\python程序设计\python.01\chap15\sixty-second.py
print(os.path.exists('sixty-second.py'),os.path.exists('first')) # True False
print(os.path.join('F:\\桌面','sixty-second.py')) # F:\桌面\sixty-second.py
print(os.path.split('F:\桌面\python程序设计\python.01\chap15\sixty-second.py')) # ('F:\\桌面\\python程序设计\\python.01\\chap15', 'sixty-second.py')
print(os.path.splitext('sixty-second.py')) # F:\桌面\sixty-second.py
print(os.path.basename('F:\桌面\python程序设计\python.01\chap15\sixty-second.py')) # sixty-second.py
print(os.path.dirname('F:\桌面\python程序设计\python.01\chap15\sixty-second.py')) # F:\桌面\python程序设计\python.01\chap15
print(os.path.isdir('F:\桌面\python程序设计\python.01\chap15\sixty-second.py')) # False
例题1:
# 列出指定目录下的所有py文件
import os
path=os.getcwd() # 当前工作目录
lst=os.listdir(path) # 目录下所有文件和目录信息
for filename in lst:
if filename.endswith('.py'): # endswith('.py')--以.py结尾
print(filename)
例题2:
# 遍历所有文件 walk--遍历指定目录下的所有文件及目录
import os
path=os.getcwd() # 获取当前的工作目录
lst_files=os.walk(path)
# print(lst_files) # 一个迭代器对象 <generator object walk at 0x00000268F2909E40>
for dirpath,dirname,filename in lst_files: # 遍历这个迭代器对象 这个迭代器对象返回是一个元组,这个元组包含目录下的所有文件夹和目录下的所有文件
'''print(dirpath)
print(dirname)
print(filename)
print('---------------------------') # 遍历了当前目录、当前目录的子文件'''
for dir in dirname: # 逐层遍历
print(os.path.join(dirpath,dir))
for file in filename:
print(os.path.join(dirpath,file))
print('---------------------------')