>>> import os #引入目录操作的包os
>>> os.getcwd() #获取当前的工作目录 c:current w:wording d:directory
'C:\\Users\\dell'
>>>
>>> os.chdir("d:\\pic") #chdir切换目录
>>> os.getcwd()
'd:\\pic'
>>> os.listdir() #查看当前目录下有什么文件(只显示第一层),括号里可以指定参数路径
['1.jpg', 'baidu.html']
>>> import os.path
>>> os.path.isdir("d:\\pic") #isdir判断是否是目录
True
>>> os.path.isdir("d:\\pic\\1.jpg")
False
>>> os.path.isdir("d:\\a.txt")
False
>>> os.path.isfile("d:\\a.txt") #isfile判断是否是文件
True
>>>
小练习:统计一个目录下(一层目录),统计一下有多个文件
统计一下有多少个目录
算法:
1 定义文件计数的变量
2 定义文件夹计数的变量,并赋值0
3 使用os.listdir()获取所有的文件和目录名称,这个返回值是列表
4 使用for 进行遍历,使用os.path.isdir和isfile来分别判断是文件还是目录
如果是文件,则在文件计数的变量上+1,否则在目录计数的变量上加一
5 输出统计结果:文件计数和目录计数的变量值
import os
import os.path
file_count = 0
dir_count =0
for i in os.listdir("d:\\pic"):
print("取出的内容:",i)
if os.path.isfile("d:\\pic\\"+i):
file_count+=1
else:
dir_count+=1
print("文件个数:%s" %file_count)
print("目录个数:%s" %dir_count)
>>> os.getcwd()
'd:\\pic'
>>> os.remove("d:\\pic\\1.jpg") #删除文件,只能一次删除一个文件
>>> os.listdir()
['baidu.html']
>>>
>>> os.mkdir("d:\\pic\\testman") #创建目录
>>> os.mkdir("d:\\pic\\testman\\testman1")
>>> os.mkdir("d:\\pic\\testman\\testman1\\testman3")
>>> os.mkdir("d:\\pic\\testman\\testman1\\testman4")
>>>
#删除目录
>>> os.mkdir("d:\\pic\\testman")
>>> os.mkdir("d:\\pic\\testman\\testman1")
>>> os.mkdir("d:\\pic\\testman\\testman1\\testman3")
>>> os.mkdir("d:\\pic\\testman\\testman1\\testman4")
>>> os.removedirs("d:\\pic\\testman\\testman1\\testman3")
>>> os.removedirs("d:\\pic\\testman\\testman1\\testman4") #删testman4的时候把它的上级testman1和上上级testman中,只要是非空的目录一并删了,递归删除空目录
从路径的下面开始删除空目录,如果遇到了某个
目录非空(包含子目录或者文件)就停止删除目录了
os.removedirs() 方法用于递归删除目录。
像rmdir(), 如果子文件夹成功删除, removedirs()才尝试它们的父文件夹,直到抛出一个error(它基本上被忽略,因为它一般意味着你文件夹不为空)。
os.remove() 方法用于删除指定路径的文件。
如果指定的路径是一个目录,将抛出OSError。
在Unix, Windows中有效
>>> os.getcwd()
'd:\\pic'
>>> os.path.isabs("a.txt") #判断是否是绝对路径
False
>>> os.path.isabs("d:\\a.txt")
True
>>>
>>> if not os.path.exists("e:\\pic1\\2.txt"):
... with open("e:\\pic1\\2.txt","w") as fp:
... fp.write("")
创建一个10级目录,每个目录的名字从gloryroad1-10,每个目录创建一个文件,文件的名字是1-10.txt,文件内容写上文件名
算法:
1 写一个for 循环,循环10次
2 在循环体下,创建一个目录为gloroadi(i是循环的变量值),os.chdir进入到新创建的目录,然后用with方法创建文件,
文件名使用i变量+".txt"的方式来拼接文件名,然后使用w模式,给文件写内容,写的文件内容就是拼接的文件名
import os
dir_name = "glroyroad"
os.chdir("d:\\pic")
for i in range(1,11):
os.mkdir(dir_name+str(i))
os.chdir(dir_name+str(i))
with open(str(i)+".txt","w") as fp:
fp.write(str(i)+".txt")
>>> os.path.split("d:\\pic\\bd.html") #切割文件名和文件路径
('d:\\pic', 'bd.html')
>>> os.path.split("d:\\pic\\bd.html")[0] #获取文件路径
'd:\\pic'
>>> os.path.split("d:\\pic\\bd.html")[1] #获取文件名
'bd.html'
>>>
##等同于下面的两个api
>>> os.listdir()
['baidu.html']
>>> os.listdir("d:\\")
['$RECYCLE.BIN', '360downloads', '360WiFi', '360极速浏览器下载', '360驱动大师目录', 'a.py', 'a.txt', 'aa.py', 'apache-maven-3.6.1', 'apache-tomcat-8.5.40', 'apache-tomcat-8.5.43', 'AutoTestLog.log', 'b.txt', 'BaiduNetdiskDownload', 'CloudMusic', 'dataDriveRreport.log', 'fdf98c88a68350d8deab4a0ae668ba20', 'iDownload', 'library_data.txt', 'LR', 'mgtv', 'mgtv.cache', 'packagea', 'php', 'pic', 'python', 'qq.jtl', 'road', 'sample.xlsx', 'sohu.jtl', 'System Volume Information', 'VM box', 'wamp', 'Youku Files', '__pycache__', '常用文档', '软件', '迅雷下载']
>>> os.path.dirname("d:\\pic") #获取路径名
'd:\\'
>>> os.path.dirname("d:\\pic\\baidu.html")
'd:\\pic'
>>> os.path.basename("d:\\pic\\baidu.html") #获取文件名
'baidu.html'
>>>
>>> os.path.splitext("d:\\pic\\baidu.html") #切割文件名后缀和路径
('d:\\pic\\baidu', '.html')
>>> os.path.splitext("d:\\pic\\baidu.html")[0]
'd:\\pic\\baidu'
>>> os.path.splitext("d:\\pic\\baidu.html")[1]
'.html'
>>>
>>> os.listdir()
['baidu.html']
>>> os.rename("baidu.html","bd.html") #改名
>>> os.listdir()
['bd.html']
>>> os.path.getsize("d:\\pic\\bd.html") #获取文件大小(字节数)
15625
>>> os.getcwd()
'd:\\pic'
>>> os.rmdir("test")
>>> os.mkdir("d:\\pic\\test")
>>> os.listdir()
['bd.html', 'test']
>>> os.rmdir("test") #删除目录
>>> os.listdir()
['bd.html']
>>>
#join拼接路径
>>> os.path.join("d:\\pic","a.txt")
'd:\\pic\\a.txt'
>>> "d:\\pic\\"+"a.txt"
'd:\\pic\\a.txt'
>>> "d:\\pic"+os.sep+"a.txt"
'd:\\pic\\a.txt'
>>>