Python——文件操作(day11)

目录

一、文件打开关闭

二、文件读写

三、应用:文件备份脚本

四、文件定位

五、import导入模块

六、os模块操作文件

七、模块的制作、发布、安装

7.1 模块的制作

7.2 模块的发布

一、文件打开关闭

(1)打开文件

 (2)关闭文件

 (1)写文件

二、文件读写

(2)读文件

 

(3)with

# 文件的操作
# 打开文件 open
# 默认的编码是gbk 这个是中文编码,最好的习惯呢就是我们再打开一个文件的时候
# 给它指定一个编码类型
# fobj=open('./Test.txt','w',encoding='utf-8')
# # 开始操作 读/写操作
# fobj.write('在苍茫的大海上')
# fobj.write('狂风卷积着乌云')
# fobj.write('在乌云和大海之间\r\n')
# fobj.write('海燕像黑色的闪电\r\n')
# fobj.close()

# 以二进制的形式去写数据
# fobj=open('Test_1.txt','wb') #str-->bytes
# fobj.write('在乌云和大海之间'.encode('utf-8'))
# fobj.close()
# fobj=open('Test.txt','a') #用于追加数据,不需要.encode('utf-8'),ab要编码
# fobj.write('在乌云和大海之间\r\n')
# fobj.write('海燕像黑色的闪电\r\n')
# fobj.close()

fobj=open('Test.txt','a') #  a  用于追加数据
fobj.write('在苍茫的大海上')
fobj.write('狂风卷积着乌云')
fobj.write('在乌云和大海之间\n')
fobj.write('海燕像黑色的闪电\n')
fobj.write('今天我诗兴大发\n')
fobj.write('发感觉咋样呢\n')
fobj.close()
# 读数据操作
f=open('Test.txt','rb')
data=f.read() #读取所有的数据
print(data)
print(data.decode('gbk'))
# print(f.read(12))
# # print(f.read())
# print(f.readline()) #读一行数据
# print(f.readlines(1))
# f.close()  #文件对象关闭掉
# with上下文管理对象
# 优点 自动释放打开关联的对象
with open('Test.txt','a') as f:
    # print(f.read())
    f.write('我觉得python非常的好学\n')


# 小结
# 文件读写的几种操作方式
# read  r r+  rb  rb+
# r r+ 只读  使用普通读取场景
# rb  rb+  适用于 文件 图片 视频 音频 这样文件读取
# write w  w+ wb+  wb a  ab
# w wb+ w+  每次都会去创建文件
# 二进制读写的时候 要注意编码问题  默认情况下 我们写入文件的编码是gbk
# a  ab a+  在原有的文件的基础之后去【文件指针的末尾】去追加,
# 并不会每次的都去创建一个新的文件

def ctime(sec):
    pass

三、应用:文件备份脚本

 

# import fileOpt

# 文件的备份
# def copyFile():
#     # 接收用户输入的文件名
#     old_file=input('请输入要备份的文件名:')
#     file_list=old_file.split('.')
#     # 构造新的文件名.加上备份的后缀
#     new_file=file_list[0]+'_备份.'+file_list[1]
#     old_f=open(old_file,'r') #打开需要备份的文件
#     new_f=open(new_file,'w') #以写的模式去打开新文件,不存在则创建
#     content=old_f.read() #将文件内容读取出来
#     new_f.write(content) #将读取的内容写入到备份文件
#     old_f.close()
#     new_f.close()
#     pass
#
# copyFile()


def copyBigFile():
    # 接收用户输入的文件名
    old_file=input('请输入要备份的文件名:')
    file_list=old_file.split('.')
    # 构造新的文件名.加上备份的后缀
    new_file=file_list[0]+'_备份.'+file_list[1]
    try:
        #监视啊哟处理的逻辑
        with open(old_file,'r') as old_f,open(new_file,'w')as new_f:
            while True:
                content=old_f.read(1024) #一次读取1024字符
                new_f.write(content)
                if len(content)<1024:
                    break
    except  Exception as msg:
        print(msg)
    pass

copyBigFile()

四、文件定位

utf-8:默认一个汉字占3个字节

gbk:一个汉字2个字节

# tell  返回指针当前所在的位置
# 对于中文讲 每次读取到的一个汉字 实际上占用了 2个字符
# with open('Test.txt','r+') as f:
#     print(f.read(3))
#     print(f.tell())
#     print(f.read(2))
#     print(f.tell())
#    pass

# truncate 可以对源文件进行截取操作
# fobjB=open('Test.txt','r')
# print(fobjB.read())
# fobjB.close()
# print('截取之后的数据........')
#
# fobjA=open('Test.txt','r+')
# fobjA.truncate(15) #保留前15个字符
# print(fobjA.read())
# fobjA.close()

# seek 可以控制光标所在位置
with open('Test_备份.txt','rb') as f:
    f.seek(4,0) #光标是从0的位置开始 像前【右】移动 4个字符
    data=f.read(2)
    print(data.decode('gbk'))
    f.seek(-2,1) #相当于光标有设置到了0的位置
    print(f.read(4).decode('gbk'))
    f.seek(-6,2) #2 表示光标在末尾处  往回移动了6个字符
    print(f.read(4).decode('gbk'))
    pass

# 对于这种情况 用'r'这种模式打开文件,在文本文件中,没有使用二进制的选项打开文件,
# 只允许从文件的开头计算相对位置,从文件尾部计算或者当前计算的话 就会引发异常

turncate:裁剪文件,源文件也被裁剪

 

五、import导入模块


 

 

六、os模块操作文件

 

 

import os
import shutil
# os.rename('Test.txt','Test_重命名.txt')
# os.remove('File_del.py') #删除文件 前提是文件必须存在
# os.mkdir('TestCJ') 创建文件夹
# os.rmdir('TestCJ') #删除文件夹 文件必须存在
# mkdir 创建一级目录
# os.mkdir('d:/Python编程/sub核心') #不允许创建多级
# 创建多级目录
# os.makedirs('d:/Python编程/sub核心/三级sub') #允许
# os.rmdir('d:/Python编程') #只能删除空目录
# 如果要删除非空目录的话 就需要调用shutil模块
# shutil.rmtree('d:/Python编程') #非空删除

# 获取当前的目录
# print(os.getcwd())
# 路径的拼接
# print(os.path)
# print(os.path.join(os.getcwd(),'venv'))
# 获取python中的目录列表
# listRs=os.listdir('d:/')  老版本的用法
# for dirname in listRs:
#     print(dirname)
# 使用现代版的写法
# scandir 和 with一起来使用  这样的话 上下文管理器会在迭代器遍历完成后自动
# 去释放资源
# with os.scandir('d:/') as entries:
#     for entry in entries:
#         print(entry.name)
basePath='d:/'
for entry in os.listdir(basePath):
    # if os.path.isfile(os.path.join(basePath,entry)):
    #     print(entry)
    if os.path.isdir(os.path.join(basePath,entry)):
        print(entry)
        pass

七、模块的制作、发布、安装

7.1 模块的制作

moudel:

# 模块的制作说明

# __all__魔术变量的作用是 如果在一个文件中存在 __all__变量,那么也就意味着这个变量中的元素
# 会被from XXX import *时会被导入,对于import 方式来讲 无所谓 有没有 都可以全部的引用

__all__=['add','diff']

def add(x,y):
    '''
    普通的函数
    :param x:
    :param y:
    :return:
    '''
    return x+y

def diff(x,y):
    return x-y
def printInfo():
    return '这是我自定义模块里面的方法'

# 测试
if __name__=='__main__':
    res=add(2,5)
    print('测试模块, %s'%res)
    print('模块__name__变量=%s'%__name__)
    pass

 调用:

from moudelTest.moudelTest import moudelTest

# from moudelTest import add #第二种导入方式
# res=moudelTest.add(1,3)
# print(moudelTest.diff(7,4))

print(moudelTest.printInfo()) #尽管不在 __all__ 中 也可以调用

# print(res)
# print(add(67,3))
# print(diff(34,3))
# print(printInfo())   #对于这种情况 就不能使用了 因为没有在__all__中

7.2 模块的发布

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清园暖歌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值