目录
❤ OS模块和path模块(函数)
❤ os模块中操作目录以及文件的函数
❤ os模块中遍历目录数
❤ 一些表现形式参数
❤ 获取在进程的控制终端上登录的用户的名称: os.getlogin() (即此时pc登录的用户名)
❤ 总结
❤ os.listdir()与os.walk()两种方式获取文件路径与文件目录下所有子目录和文件的区别
❤ 例子1:在一个目录下面只有文件时可以使用 os.listdir() 函数
❤ 实例2:当一个目录下面既有文件又有目录(文件夹),可使用 os.walk() 函数读取里面所有文件
python从小白到总裁完整教程目录:https://blog.csdn.net/weixin_67859959/article/details/129328397?spm=1001.2014.3001.5502
os.mkdir('文件夹名') :新建文件夹;入参为目录路径,不可为文件路径;(父目录必须存在的情况下创建下一级文件夹)
os.rmdir('文件夹名') :删除文件夹;入参为目录路径,不可为文件路径
os.remove('文件路径') :删除文件;入参为文件路径,不可为目录路径
os.makedirs('路径及文件') :递归新建文件夹;可以连续创建该文件夹的多级目录
os.path.isdir('路径') :判断入参路径是否为文件夹,返回值为布尔值;是文件夹返回True,不是文件夹返回False
os.path.isfile('路径') :判断入参路径是否为文件,返回值为布尔值;是文件返回True,不是文件返回False
一个遍历目录数的函数,它以一种深度优先的策略(depth-first)访问指定的目录
os.walk(top=path,topdown=True,oneerror=None)
- 参数 top 表示需要遍历的目录树的路径。
- 参数 topdown 默认为 True ,表示首先返回根目录树下的文件,然后,再遍历目录树的子目录。 当topdown 的值为 False 时,则表示先遍历目录树的子目录,返回子目录下的文件,最后返回根目录下的文件
- 参数 oneerror 的默认值为 None ,表示忽略文件遍历时产生的错误;如果不为空,则提供一个自定义函数提示错误信息,后边遍历抛出异常。
os.walk() 函数的返回值是一个生成器(generator),每次遍历的对象都是返回的是一个三元组 (root,dirs,files):该元组有3个元素,这3个元素分别表示每次遍历的路径名,目录列表和文件列表。
- root 代表当前遍历的目录路径,string类型
- dirs 代表root路径下的所有子目录名称;list类型,列表中的每个元素是string类型,代表子目录名称
- files 代表root路径下的所有子文件名称;list类型,列表中的每个元素是string类型,代表子文件名称
当前目录:
import os
from os.path import join
home_path = "/home"
for (root, dirs, files) in os.walk(home_path):
print(root)
print(dirs)
print(files)
print("=" * 50)
输出:
/home
['root', 'zhang', 'li']
['test.txt', 'hai.mp4']
==================================================
/home/root
[]
['1.txt', '2.txt', '3.txt']
==================================================
/hoome/zhang
[]
['zhang_1.mp4', 'zhang_2.mp4', 'zhang_3.mp4']
==================================================
/home/li
[]
[]
==================================================
一共三行:
第1行代表当前遍历的目录,我们称为root目录,
第2行代表root目录下的子目录列表,我们称为dirs子目录列表,
第3行代表root目录下的子文件列表,我们称为files子文件列表,
注意:上面的列表为空就代表当前遍历的root目录下没有子目录或者没有子文件
例子:遍历home目录下获取所有的目录和文件的绝对路径
import os
from os.path import join
home_path = "/home"
for (root, dirs, files) in os.walk(home_path):
for dir in dirs:
print(join(root, dir))
for file in files:
print(join(root, file))
输出:
/home
/home/root
/home/zhang
/home/li
/home/test.txt
/home/hai.mp4
/home/root/1.txt
/home/root/2.txt
/home/root/3.txt
/home/zhang/zhang_1.mp4
/home/zhang/zhang_2.mp4
/home/zhang/zhang_3.mp4
例子:
import os
def walk(path):
if not os.path.exists(path):
return -1
for root,dirs,names in os.walk(path):
for filename in names:
print(os.path.join(root,filename)) # 路径和文件名连接构成完整路径
if __name__=='__main__':
path = "C:\\Users\\Administrator\\Desktop\\2017-9-1"
walk(path)
输出:
C:\Users\Administrator\Desktop\2017-9-1\2017-9-1.txt
C:\Users\Administrator\Desktop\2017-9-1\2017-9-1storage.txt
C:\Users\Administrator\Desktop\2017-9-1\apk.conf
C:\Users\Administrator\Desktop\2017-9-1\数据采集导入质量统计_2017-09-01.docx
C:\Users\Administrator\Desktop\2017-9-1\test1\2017-9-1.txt
C:\Users\Administrator\Desktop\2017-9-1\test2\2017-9-1.txt
os模块中还定义了一组文件、路径在不同操作系统中的表现形式参数。如下:
os.sep # '\\'
os.extsep # '.'
os.pathsep # ';'
os.linesep # '\r\n'
参数:不需要参数
返回类型:此方法返回一个字符串,该字符串表示在进程的控制终端上登录的用户的名称。
# Python program to explain os.getlogin() method
# importing os module
import os
# Get the name of the user
# logged in on the controlling
# terminal of the process.
user = os.getlogin()
# Print the name of the user
# logged in on the controlling
# terminal of the process.
print(user)
输出:
text
# python--函数 os.sep :主要用于系统路径中的分隔符
# Windows系统通过是“\\”,Linux类系统如Ubuntu的分隔符是“/”,而苹果Mac OS系统中是“:”# 常用的os模块命令:
# 1、os.name——name顾名思义就是'名字',这里的名字是指操作系统的名字,主要作用是判断目前正在使用的平台,并给出操作系统的名字,如Windows 返回 'nt'; Linux 返回'posix'。注意该命令不带括号。
# 2、os.getcwd()——全称应该是'get current work directory',获取当前工作的目录
# 3、os.listdir(path)——列出path目录下所有的文件和目录名。Path参数可以省略。
# 4、os.remove(path)——删除path指定的文件,该参数不能省略。
# 5、os.rmdir(path)——删除path指定的目录,该参数不能省略。
# 6、os.mkdir(path)——创建path指定的目录,该参数不能省略。
# 7、os.unlink() 方法用于删除文件,如果文件是一个目录则返回一个错误# os.remove() #删除文件
# os.rename() #重命名文件
# os.walk() #生成目录树下的所有文件名
# os.chdir() #改变目录
# os.mkdir/makedirs() #创建目录/多层目录
# os.rmdir/removedirs #删除目录/多层目录
# os.listdir() #列出指定目录的文件
# os.getcwd() #取得当前工作目录
# os.chmod() #改变目录权限
# os.path.basename() #去掉目录路径,返回文件名
# os.path.dirname() #去掉文件名,返回目录路径
# os.path.join() #将分离的各部分组合成一个路径名
# os.path.split() #返回(dirname(),basename())元组
# os.path.splitext() #返回filename,extension)元组
# os.path.getatime\ctime\mtime #分别返回最近访问、创建、修改时间
# os.path.getsize() #返回文件大小
# os.path.exists() #是否存在
# os.path.isabs() #是否为绝对路径
# os.path.isdir() #是否为目录
# os.path.isfile() #是否为文件
# os.system('command') 会执行括号中的命令,如果命令成功执行,这条语句返回0,否则返回1
test_file文件夹中包含三个文件:
test_file:
test1.txt
test2.txt
test3.txt
获取该目录下的每个文件的绝对路径:
import os
path = r'C:\Users\XXN\Desktop\test_file'
for each_file in os.listdir(path):
print(os.path.join(path,each_file))
输出:
C:\Users\XXN\Desktop\test_file\test1.txt
C:\Users\XXN\Desktop\test_file\test2.txt
C:\Users\XXN\Desktop\test_file\test3.txt
test_file中既包含文件也包含文件夹:
Test_file:
file1:
test1.txt
test2.txt
test3.txt
file2:
test1.txt
test2.txt
test3.txt
test1.txt
test2.txt
test3.txt
import os
path = r'C:\Users\XXN\Desktop\test_file'
for parent,dirnames,filenames in os.walk(path):
print(parent,dirnames,filenames)
输出:
C:\Users\XXN\Desktop\test_file ['file1', 'file2'] ['test1.txt', 'test2.txt', 'test3.txt']
C:\Users\XXN\Desktop\test_file\file1 [] ['test1.txt', 'test2.txt', 'test3.txt']
C:\Users\XXN\Desktop\test_file\file2 [] ['test1.txt', 'test2.txt', 'test3.txt']
- parent:列出了目录路径下面所有存在的目录的名称
- dirnames:文件夹名
- filenames:列出了目录路径下面所有文件的名称
获得给定路径下所有的文件路径:
import os
path = r'C:\Users\XXN\Desktop\test_file'
for parent,dirnames,filenames in os.walk(path):
for filename in filenames:
print(os.path.join(parent,filename))