码迷,mamicode.com
首页 > 编程语言 > 详细

python核心编程第九章文件部分杂记

时间:2018-09-02 23:45:49      阅读:245      评论:0      收藏:0      [点我收藏+]

标签:转换   list   一个   rem   %s   简单   names   nbsp   字符   

最近开始学习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核心编程第九章文件部分杂记

标签:转换   list   一个   rem   %s   简单   names   nbsp   字符   

原文地址:https://www.cnblogs.com/lovestarmoon/p/9575442.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!