python核心编程第九章文件部分杂记
Posted lovestarmoon
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python核心编程第九章文件部分杂记相关的知识,希望对你有一定的参考价值。
最近开始学习python第九章文件,做课后题中遇到了些问题,记录下来以便后续复习或优化纠错。
1.写文件时候获取时间对象不知如何转化为字符串存入文件,后面再读文件从字符串转为对象,后来查到可以用strftime和strptime2个函数来转换。
a.时间datetime对象A可以通过A.strftime(“%Y-%m-%d %H:%M:%S %f”)转换为字符串
b.获取的字符串A可以通过datetime.datetime.strptime(A,格式化字符串(如上))转换为datetime时间对象。
同时了解到可以用pickle等模块将文件内容序列化和反序列化,简单处理,省去细节过程,这个模块读取存储文件是以二进制方式进行,所以w和r后必须加b。还有一个据说更好的模块shelve,尚未了解 。
例如: with open(path,‘wb‘) as f:
pickle.dump(自定义结构对象,f)
这里dump将结构对象序列化存入文件,还有一个dumps它只用于字符串。
with open(path,‘rb‘) as f:
pickle.load(f)
这里读取文件内容反序列化为原来的结构对象,loads同样也只应用于字符串。
另外在open(文件名,打开方式)中遇到很多中英文路径的问题,报异常无法找到,通过把路径字符串转化为unicode后解决。
2.在匹配某些格式的文件行时,应用到了正则表达式。这里发现因为在[ ]中‘-’有特殊意义,所以如果要匹配‘-’则需要把它放到最前面避免引起错误如[-+*],同时在中括号中这些有特殊意义的符号不需要前面加‘’来匹配本身。
在编译正则时compile(str),如果str中有多个分组(),而某些分组只匹配不需要捕获的,需要在括号中加?:如(?:d{1,3})
3.在对列表删除的时候,发现remove(元素),有重复元素的时候,只能删除一个元素,可以用set先去重再删。另外循环中最好不要删除元素,导致循环对象变化容易出错,可以深copy一个对象,然后循环原来的对象,对新对象进行操作。
4.windows系统中,用cmd显示python脚本输出的print时,因为cmd软件解码方式为GBK,如果脚本是用UTF-8写的,则print输出的语句需要从UTF-8解码为unicode再编码为GBK后,才能在CMD中正常显示
5.文件通用方式:打开多个文件可以这么写:with open() as f1,open() as f2: 想要清除文件内容用f.truncate() os.getcwd()获取当前路径。
一般想要找到某个文件,我喜欢用os.listdir()然后拼接路径文件,递归直到每个路径下没有目录只有文件。 这次发现遗漏了os.walk()它会便利所有目录可以得到一个三元tupple(dirpath, dirnames, filenames),
第一个为起始路径,第二个为起始路径下的文件夹,第三个是起始路径下的文件。
dirpath 是一个string,代表目录的路径,
dirnames 是一个list,包含了dirpath下所有子目录的名字。
filenames 是一个list,包含了非目录文件的名字。
这些名字不包含路径信息,如果需要得到全路径,需要使用os.path.join(dirpath, name).
6.shutil模块, shutil.copy()可以直接复制一个文件或目录到另一个 shutil.rmtree()可以递归地删除一个目录及其内所有内容。
以上是关于python核心编程第九章文件部分杂记的主要内容,如果未能解决你的问题,请参考以下文章
Python 编程快速上手 让繁琐工作自动化-第九章实践项目 9.8.1选择性拷贝
通过游戏学python 3.6 第一季 第九章 实例项目 猜数字游戏--核心代码--猜测次数--随机函数和屏蔽错误代码--优化代码及注释--简单账号密码登陆--账号的注册查询和密码的找回修改--锁定账