chap15.

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('---------------------------')

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值