os.path模块
函数 | 食用方法 |
basename(path) | 去掉目录路径,单独返回文件名 |
dirname(path) | 去掉文件名,大怒返回目录文件 |
join(path1,path2…) | 将path1 path2组合成一个路径名 |
split(path) | 分割文件名和路径,返回一个二元组。如果完全是目录,会将最后一个目录作为文件名去分割,而且不会判断文件或目录是否存在 |
splitext(path) | 分离文件名与扩展名,返回二元组 |
getsize(file) | 返回指定文件的尺寸,单位是字节 |
getatime(file) | 返回指定文件最近访问的时间(浮点型秒数,可以用time模块的gmtime()函数换算 |
getctime(fiel) | 返回指定文件的创建时间 |
getmtime(file) | 返回文件最新的修改时间 |
以下函数返回True None
exists(path) | 判断指定路径是否存在 |
isabs(path) | 判断指定路径是否时绝对路径 |
isdir(path) | 判断指定路径是否存在切是一个目录 |
isfile(path) | 是否是一个文件 |
islink(path) | 是否是一个符号链接 |
ismount(path) | 是否存在且是一个挂载点 |
samefile(path1,path2) | 判断两个路径是否指向同一个文件 |
还有很多函数的。。。。
运用递归找子目录的文件
import os
def search_file(start_dir, target) :
os.chdir(start_dir)
for each_file in os.listdir(os.curdir) :
if each_file == target :
print(os.getcwd() + os.sep + each_file) # 使用os.sep是程序更标准
if os.path.isdir(each_file) :
search_file(each_file, target) # 递归调用
os.chdir(os.pardir) # 递归调用后切记返回上一层目录
start_dir = input('请输入待查找的初始目录:')
target = input('请输入需要查找的目标文件:')
search_file(start_dir, target)
一个输入路径,文件名找文件的代码。运用递归去找子目录下的文件。递归调用后记得返回上一层目录
请输入待查找的初始目录:C:\Users\NERO\Desktop\python专用
请输入需要查找的目标文件:123.txt
C:\Users\NERO\Desktop\python专用\123\123.txt
C:\Users\NERO\Desktop\python专用\123.txt
根据上面的可以增加一些功能:
import os
def search_file(start_dir,target):
os.chdir(start_dir)
for each in os.listdir(os.curdir):
ext = os.path.splitext(each)[1]
if ext in target:
filelist.append(os.getcwd()+os.sep+each+'\n')
if os.path.isdir(each):
search_file(each,target)
os.chdir(os.pardir)
start_dir=input('输入要找的路径:')
list1=input('请输入要找的文件扩展名:')
target=list1.split(',')
filelist=[]
search_file(start_dir,target)
f= open(r'C:\Users\NERO\Desktop\python专用\file.txt','r+')
f.writelines(filelist)
f.close()
查找路径下指定扩展名的文件,并保存到file.txt这个文件中。。。。。(.avi啥的)
pickle模块(泡菜)
- 对于普通的文件操作,想要保存列表,字典,类的实例这些复杂的数据类型会很麻烦。pickle模块就可以容易的将复杂的数据类型储存为文件的形式。它可以几乎所有的对象转换成二进制形式存放。
import pickle
list1=[123,3.14,'hhh',['aaa','bbb']]
file=open(r'路径','wb')
pickle.dump(list,file)
file.close()
在要使用的时候,用二进制模式打开文件,在用load() 把数据加载进来。
pickle.dump(data, file) # 第一个参数是待存储的数据对象,第二个参数是目标存储的文件对象,注意要先使用’wb’的模式open文件