二.一些特殊用法
1.从现有文件中获取信息(os,stat)
当我们读取一个文件之后,如果还想知道关于这个文件的一些属性信息,怎么得到?在python中,我们可以使用os和stat模块来获取基本信息,来看一个例子:
当然,当我们打开一个“文件”后,不清楚到底是不是文件,还是目录,我们可以这么判断:
2.目录操作(os, fnmatch , glob)
1.列出一个目录下的所有内容
2.创建一个目录
3.删除一个目录(假设该目录下存在文件)
我们在刚刚创建的new文件夹下新建一个txt文档,试着删除这个文件夹new:
这个时候报错了,错误显示是目录非空,不能删除,查了一下,发现有很多方法,找了个最简洁的,试了一下:
发现文件夹不在了,这就是我们后面要说到的shutil模块。
4.当我们要处理某一类型的文件时该怎么办?
这个时候就可以用模块”fnmatch”和”glob”模块了。我们先从glob说起,现我们在F:\\coding\\python目录下新建了3个目录,分别为new1,new2,new3,在这三个目录下,我们又分别新建了一些其他文件,现在我们就来看看glob的便捷之处:
经过上面的实践之后,又有一个问题了,假如我们需要对某个目录下的不同类型文件进行操作时,该怎么办呢?看下面的例子:
5.当我们需要获取一个目录下的所有文件,怎么办?
首先我们能想到的当然是glob,递归搜索应该就可以了,如下:
但是本着偷懒的原则,还是觉得代码繁琐,于是查了一下,果然还有一个os.walk方法,os.walk()返回一个3元素tuple:当前路径,子文件夹名称,文件列表,看一下示例:
6.除了字符串以外,我们需要传递其他数据怎么办?(pickle)
在python中还有很多其他类型,如list、tuple、dictionary和其它对象,如何转换呢?在Python中,你可以使用Pickle来完成。你可以使用Python标准库中的“pickle”模块完成数据编组。
下面,我们来编组一个包含字符串和数字的list:
这里,我们根据实验很容易就能联想到对象序列化,那么pickle到底能不能支持任意自定义对象的序列化呢?我们试一试:
果然,这与我们的猜测是一致的。