python基础语法Day11

1 文件读写

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

# 以二进制的形式去写数据
fobj=open('Test_1.txt','wb') #str-->bytes  #wb二进制格式
fobj.write('在乌云和大海之间'.encode('utf-8'))
fobj.close()
fobj=open('Test.txt','a') #用于追加数据
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

2备份文件

# import fileOpt

 #文件的备份
def copyFile():
    # 接收用户输入的文件名
    old_file=input('请输入要备份的文件名:')
    file_list=old_file.split('.')#分割文件名和文件格式
    # 构造新的文件名.加上备份的后缀
    new_file=file_list[0]+'_备份.'+file_list[1]#0文件名,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

3文件定位

# tell  返回指针当前所在的位置
# 对于中文讲 每次读取到的一个汉字 实际上占用了 2个字符;1英文=1个字符
with open('Test.txt','r+') as f:
    print(f.read(3))#读3个
    print(f.tell())#定位
    print(f.read(2))#又读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: #rb 二进制形式读
    f.seek(4,0) #光标是从0的位置开始 像前/右移动 4个字符
    data=f.read(2)
    print(data.decode('gbk'))
    f.seek(-2,1) #1,从当前位置开始移动,相当于光标有设置到了0的位置
    print(f.read(4).decode('gbk'))
    f.seek(-6,2) #2 表示光标在末尾处  往左/回移动了6个字符
    print(f.read(4).decode('gbk'))
    pass

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

4模块导入方式

import time as myTime  #加了一个别名
print(myTime.ctime())
# print(time.ctime()) #调用模块中的函数了
import fileOpt
from time import ctime,time #部分导入
# from time import *
print(ctime())
# from ...import 首次导入发生了3个步骤
# 1 以模块为准创造一个模块的名称空间
# 2 执行模块对应的文件了,将执行过程中产生的名字都丢到模块的名称空间
# 3 在当前执行文件的名称空间中拿到一个名字,该名字直接指向模块中的某一个名字,
# 意味着可以不用加任何的前缀而直接使用

# 优点:不用加前缀 代码更加简洁了
# 缺点: 容易与当前执行文件中名称空间中的名字冲突
# import 到首次导入模块的时候 会发生如下3步操作
# 1 打开模块文件
# 2 执行模块对应的文件,将执行过程中产生的名字都丢到模块的名称空间
# 3 在程序中会有一个模块【可以取别名的】的名称指向模块的名称空间去

# 相同点和不同点
# 相同
# 都会执行模块对应的文件 并且呢 都会产生模块课的名称空间
# 两者在调用功能时呢,都需要转到定义时寻找作用域关系
# 不同点
# import 需要加前缀  from...import 不需要加前缀

5python-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.m/mdir('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

6模块导入

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__中
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值