python08——文件操作与模块
1.文件打开关闭与读写
打开文件、写入文件
fobj=open('test.txt','w',encoding='utf-8') ##打开文件 fobj.write('大风大雨我不怕') ##写入文件 fobj.write('一边走一边唱') ##写入文件 fobj.close() ##保存并关闭
fobj=open('test.txt','wb') #str-->bytes ##打开文件 fobj.write('在乌云下'.encode('utf-8')) ##写入文件 fobj.close() ##保存并关闭
fobj=open('test.txt','a') #str-->bytes ##打开文件 fobj.write('在乌云下\n') ##写入文件 fobj.write('发呆\n') fobj.close() ##保存并关闭
w——会覆盖
a——会追加
wb——以二进制格式覆盖
以二进制的形式去写数据
读文件:
read()——将文件内容全部取出
readlines()——按行读取,一次性读取所有内容,返回一个列表,每行内容作为一个元素
f=open('test.txt','r') #print(f.read(5)) #读5个 #print(f.read()) #读全部 会接在5个后面读全部 #print(f.readline()) #读一行 #print(f.readline()) #再读一行 #print(f.readlines()) #按行读取全部,返回列表
r——只读
rb——以二进制模式读(适用于图片、视频、音频)
f=open('test.txt','rb') data=f.read() print(data.decode('utf-8'))
f.close()
with语句: 自动关闭文件
with open('test.txt','r') as f: print(f.read())
3.应用:文件备份脚本
一次性读取,只适用于小文件
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
def bkFile(): ###接收用户输入的文件名 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() bkFile()
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
def bkBigFile(): ###接收用户输入的文件名 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) new_f.write(content) if len(content)<1024: break except Exception as msg: print(msg) bkBigFile()
4.文件定位
tell() 当前文件指针读取到的位置,通过tell获取
with open('test.txt','r') as f: print(f.read(3)) print(f.tell()) print(f.read(2)) print(f.tell()) ##返回当前指针的位置:5
truncate 可以对源文件进行截取操作
fobjA=open('test.txt','r+') fobjA.truncate(15) ##保留前15个字符 print(fobjA.read()) fobjA.close()
seek(offset,from) 定位某个位置。偏移量offset,负数往回偏移,正数往前偏移;位置from,0开头,1当前,2末尾。
d=open('test.txt','rb') ###使用seek得使用rb模式 print(d.read(5)) print(d.seek(-2,1)) d.close()
5.模块介绍
#import 导入模块 import time #调用的时候time.函数名 time.ctime() #取别名: import time as mytime ##部分导入的方法(调用时不用前缀了) from time import ctime,time from time import *全部导入
一个.py文件就是一个模块,模块中的变量名作用只在本模块中
###三种导入方式 import moduleTest #from moduleTest import add #from moduleTest import * res=moduleTest.add(1,2) print(res) print(moduleTest.diff(2,1))
moduleTest.py文件:
__all__=['add','diff'] ##from…import *只能调用被all声明的 def add(x,y): return x+y def diff(x,y): return x-y
6.os模块操作文件
#####常用方法: #修改文件名: rename(需要修改的文件名,新的文件名) import os os.rename(‘1.py ' ,'666.py ' ) #删除文件: remove(待删除的文件名) import os os.remove( '3.py ' ) #创建文件夹: mkdir(文件夹名称) import os os.mkdir( 'gl ') #删除文件夹: rmdir(文件夹名称) import os os.rmdir( 'gl') #获取当前目录: getcwd() import os os.getcwd() #切换目录: chdir(路径) import os os.chdir( ' ../' ) #路径拼接:os.path.join(path1[, path2[, …])将多个路径组合后返回 import os path =os.path.join(os.getcwd(), 'gl')
7. 模块的制作、发布、安装
模块的制作与发布:
①新建一个文件夹test,将moduleTest.py放进去,新建一个setup.py,内容如下:
from distutils.core import setup #name模块名称 #version 版本号#description描述#author作者 #py_modules要发布的内容 setup(name="test", version="1.0", description="my module", author="yh", py_modules=[ 'moduleTest'])
②在terminal中进去test中,输入命令:python setup.py build
③生成压缩包:python setup.py sdist
安装:
解压安装包,进入test-1.0目录下执行:pythonsetup.py install
习题:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1、现在有一个5G的大文件需要做备份,请写一个脚本备份这个文件。 2、有一批文件需要在文件名加上日期,比如文件“亚瑟.py”,要重命名成“2020-6-9_亚瑟.py请编写程序完成重命名,(提示: 这个脚本会将当前文件夹下的所有文件重命名,最好新建 一个测试文件夹完成) 3、time, os模块使用(练习模块使用方法,熟悉模块各个方法)。 4、编写一个自己的模块,发布并安装。 5、题目:有两个磁盘文件A和B,各存放一行字母,要求把这两个文件中的信息合并(按字母顺序排列),输出到一个新文件C中。 6、Python简陋版工资管理系统 要求: 彦100000盖伦80000莫甘娜50000赵信30000 以上是info.txt文-----实现效果: 从info.txt文件中读取员工及其工资信息,最后将修改或增加的员工工资信息也写入原info.txt文件。