Python(7):文件和目录

文件和目录,对于每一个新手来说,都是一个难点。
回忆一下C++的文件和目录的操作:
引入指定的类,就可以对文件进行操作。
需要传入文件的路径。
打开文件有输入,输出,输入和输出等权限可以选择。
还有个二进制文件的模式。
C++对输入输出都用了流的概念,将无论输入输出到控制台还是文件或者其他东西都统一起来。

不知道Python有没有这种东西,估计还是有的。其实用多了就习惯了。
主要是接触少。一个项目通常都是写一次就完事了。

先看看代码:
a = open(r'e:\test.txt','w')#1
a.write('hello world')#2
a.close()#3
#1打开文件,如果没有的话,就创建一个,w表示是写操作打开。路径这里使用了绝对路径,也可以使用相对路径
#2对文件进行写入操作。
#3关闭文件。一开始忘记写()了。但是也没有报错。相当于对a定义了一个close的属性,但是又没有初始化。同时也没有调用到close()函数了。没有关闭到文件。同时也可以看到写操作是用了缓存,因为我没有手动刷新,所以一直没有保存,通常关闭文件的时候,会自动保存一下的。所以我开始的时候,生成了test.txt,但是没有任何内容的。
使用相对路径之后。可以发现生成的文件是在调用这句代码的那个文件的目录下的。

到目前为止,还是跟C++差不多的,不同之处在于,Python似乎自己已经引入了文件读写的模块了。
'a'再文档末尾附加内容
'r'读文档

读写文件跟C++的差不多,但是对于路径之类,Python就有很多自己的函数了。或者总体思想还是一样的,只是我不熟悉而已。


路径:
os.path.join()可以将不同的目录组成一个路径。因为不同的操作系统,可能路径不同。使用这个可以适应不同平台。
os.path.split()可以将路径分解成不同的目录。不过这个函数只拆分一个,需要自己写递归。
>>> a = os.path.join('dir1','dir2','dir3')
>>> a
'dir1\\dir2\\dir3'
>>> b,c = os.path.split(a)
>>> b
'dir1\\dir2'
>>> c
'dir3'
os.path.splitext拆分扩展名
>>> os.path.splitext("xxx.bat")
('xxx', '.bat')
os.path.normpath 规范化和清理路径
>>> os.path.normpath(r"E:\\/..\test.txt")
'E:\\test.txt'
os.path.abspath 将相对路径转为绝对路径。这个只是从当前路径进行转换,并没有判断文件是否存在。
>>> os.path.abspath("test.txt")
'E:\\test.txt'
os.path下面所有的路径操作函数都不检查正在操作的路径是否真正存在。除了下面这个:
os.path.exists判断某个路径是否实际存在
>>> os.path.exists('test.txt')
True
>>> os.path.exists('xxx.xx')
False
os.listdir获取目录下的内容
>>> os.listdir('e:\\')
['$RECYCLE.BIN', 'book', 'boost_1_55_0', 'hello.py', 'System Volume Information', 'test.txt']
os.path.isfile判断一个路径是否文件
os.path.isdir判断一个路径是否目录
>>> os.path.isfile('test.txt')
True
>>> os.path.isfile('ttt')#不存在的是返回false
False
>>> os.path.isdir('book')
True
递归整个目录结构
def printTree(dirPath)
    for name in os.listdir(dirPath):
   fullPath = os.path.join(dirPath, name)
print(fullPath)
if os.path.isdir(fullPath):
   printTree(fullPath)
os.path.getsize 返回文件大小
>>> os.path.getsize('test.txt')
22
os.path.getmtime 文档最后修改时间,1970年以来的秒数
>>> os.path.getmtime('test.txt')
1488182858.214933
>>> import time
>>> time.ctime(os.path.getmtime('test.txt'))
'Mon Feb 27 16:07:38 2017'
通过time模块,可以转换成人类的时间

模块shutil包含操作文件的函数
shutil.move 重命名一个文件
>>> import shutil
>>> shutil.move('test.txt', 'ttt.bat')
'ttt.bat'
>>> shutil.move('ttt.bat','test/ttt.tat')
'test/ttt.tat'
或者直接移动,或者移动的时候顺便改名。

另外,如果路径是不存在的话,是不会创建目录而是报错。

改名的还有一个os.rename函数


复制一个文件

>>> shutil.copy("xxx.txt", "xxxx.txt")

文件权限 os.chmod

它与UNIX或者Linux的系统用的chmod工作方式相同


创建目录

os.mkdir("e:\\xxx")#不能中间目录,如果不存在
os.mkdir("e:\\xxx\\aaa\bbb\\ccc")#中间的目录是会创建出来的,如果不存在

删除目录

>>> os.rmdir('e:\\xxxxx')  #这个是不能删除非空的目录的
Traceback (most recent call last):
  File "<pyshell#9>", line 1, in <module>
    os.rmdir('e:\\xxxxx')
OSError: [WinError 145] 目录不是空的。: 'e:\\xxxxx'
>>> shutil.rmtree('e:\\xxxxx')#这个是删除整个目录结构,所以很危险的
>>> 

通配:

>>> import glob
>>> glob.glob("c:\\P*")
['c:\\pagefile.sys', 'c:\\PerfLogs', 'c:\\Program Files', 'c:\\Program Files (x86)', 'c:\\ProgramData']

* 0个或任意个字符

? 任意单个字符

[...] 方括号中列出的任意一个字符

[!...]不在方括号出现的任意一个字符

其实就是正则表达式,要开始接触这个东西了。

















































评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值