Python目录、文件
原文链接:http://www.juzicode.com/archives/719
1 列出当前目录下的所有文件或者文件夹 os.listdir()
import os
print('os.listdir():',os.listdir())
==========结果:
os.listdir(): ['a.txt', 'b.txt', 'os-test.py', 'txt']
2 判断是文件或是目录:os.path.isdir(path),os.path.isfile(path)
path是要判断的文件或者目录,如果是当前目录,直接使用文件或者文件夹名称,也可以是包含相对路径或绝对路径的文件或者文件夹
import os
files = os.listdir()
print('files=',files)
for f in files:
print('f:',f)
if os.path.isdir(f):
print('%s is dir'%f)
if os.path.isfile(f):
print('%s is file'%f)
==========结果:
目录结构是这样的,其中txt是目录,其他的是文件:
2020/07/01 22:40 <DIR> .
2020/07/01 22:40 <DIR> ..
2020/07/01 22:40 0 a.txt
2020/07/01 22:40 0 b.txt
2020/07/01 22:45 566 os-test.py
2020/07/01 22:40 <DIR> txt
运行结果的:
files= ['a.txt', 'b.txt', 'os-test.py', 'txt']
f: a.txt
a.txt is file
f: b.txt
b.txt is file
f: os-test.py
os-test.py is file
f: txt
txt is dir
3 环境变量
3.1 获取PATH环境变量 os.getenv(‘PATH’)
import os
print('os.getenv():',os.getenv('PATH')
==========结果:
os.getenv(PATH): C:\Program Files\python38;......
3.2 设置PATH环境变量 os.putenv(‘PATH’,XYZ)
putenv()可以用来设置PATH环境变量的值,设置后会影响os.system(), popen() or fork() and execv()等函数,改变这些函数的环境变量值,也可以用在加载dll文件前,指定dll查找路径。
import os
path = os.getenv('PATH')
os.putenv('PATH',path+';this\\is\\new\\path')
4 判断文件或目录是否存在 os.path.exists(path)
path是要判断的文件或者目录,如果是当前目录,直接使用文件或者文件夹名称,也可以是包含相对路径或绝对路径的文件或者文件夹
print('os.listdir():',os.listdir())
path = 'hello.py'
print('hello.py exists():',os.path.exists(path))
path = 'txt'
print('txt exists()::',os.path.exists(path))
==========结果:
目录结构是这样的,其中txt是目录,其他的是文件:
2020/07/01 22:40 <DIR> .
2020/07/01 22:40 <DIR> ..
2020/07/01 22:40 0 a.txt
2020/07/01 22:40 0 b.txt
2020/07/01 22:45 566 os-test.py
2020/07/01 22:40 <DIR> txt
os.listdir(): ['a.txt', 'b.txt', 'os-test.py', 'txt']
hello.py exists(): False
txt exists(): True
5 获取文件的路径
5.1 获取当前工作目录os.getcwd()
import os
print('os.getcwd():',os.getcwd())#获取当前工作目录
==========结果:
os.getcwd(): E:\juzicode\py3study\m04
5.2 __file__变量、os.path.realpath(__file__)
Python中可以利用__file__变量获取到该py文件的完整路径,比如在E:\juzicode\py3study\m04\os-test.py文件中的 __file__变量就是保存了“ E:\juzicode\py3study\m04\os-test.py ”的一个字符串变量:
print('__file__:',__file__)
print('type(__file__):',type(__file__))
print('realpath(__file__):',os.path.realpath(__file__))
__file__: E:\juzicode\py3study\m04\os-test.py
type(__file__): <class 'str'>
realpath(__file__): E:\juzicode\py3study\m04\os-test.py
5.3 获取文件夹路径 os.path.dirname(realpath)
realpath=os.path.realpath(__file__)
print('当前文件绝对路径:',realpath)
dirname = os.path.dirname(realpath)
print('目录名称:',dirname)
============结果:
当前文件绝对路径: E:\juzicode\py3study\m04\os-test.py
目录名称: E:\juzicode\py3study\m04
通过dirname()函数可以一直向上迭代找到当前所在的系统盘符,比如上面这个例子中的E:\:
realpath=os.path.realpath(__file__)
print('当前文件绝对路径:',realpath)
dirname = os.path.dirname(realpath)
print('目录名称:',dirname)
garder = os.path.dirname(dirname)
print("父目录:" + garder)
garder = os.path.dirname(garder)
print("父目录:" + garder)
garder = os.path.dirname(garder)
print("父目录:" + garder)
garder = os.path.dirname(garder)
print("父目录:" + garder)
===========结果:
当前文件绝对路径: E:\juzicode\py3study\m04\os-test.py
目录名称: E:\juzicode\py3study\m04
父目录:E:\juzicode\py3study
父目录:E:\juzicode
父目录:E:\
父目录:E:\ #找到最后一层的盘符后,不再变化
6 获取文件名称 os.path.basename(realpath)
获取到排除路径信息的文件名称,
realpath=os.path.realpath(__file__)
print('realpath(__file__):',os.path.realpath(__file__))
print('basename(realpath):',os.path.basename(realpath))
==========结果:
realpath(__file__): E:\juzicode\py3study\m04\os-test.py
basename(realpath): os-test.py
注意如果一个路径中最后是路径分隔符,basename()返回的会是一个空字符串:
print('basename():',os.path.basename('e:\\juzicode\\py3study'))
print('basename():',os.path.basename('e:\\juzicode\\py3study\\'))
==========结果:
basename(): py3study
basename():
7 splitXXX()类函数 切割函数
__file__: E:\juzicode\py3study\m04\os-test.py
split(): ('E:\\juzicode\\py3study\\m04', 'os-test.py') #切割路径和文件名
splitext(): ('E:\\juzicode\\py3study\\m04\\os-test', '.py') #切割后缀和其他
splitdrive(): ('E:', '\\juzicode\\py3study\\m04\\os-test.py') #切割盘符和其他
==========结果:
__file__: E:\juzicode\py3study\m04\os-test.py
split(): ('E:\\juzicode\\py3study\\m04', 'os-test.py')
splitext(): ('E:\\juzicode\\py3study\\m04\\os-test', '.py')
splitdrive(): ('E:', '\\juzicode\\py3study\\m04\\os-test.py')
8 获取文件属性
os.path.getatime(): 获取访问文件 ,时间戳格式
os.path.getmtime():获取修改时间,时间戳格式
os.path.getctime():获取创建时间,时间戳格式
os.path.getsize(): 获取文件大小,字节为单位
print('__file__:',__file__)
print('getatime():',os.path.getatime(__file__))
print('getmtime():',os.path.getmtime(__file__))
print('getctime():',os.path.getctime(__file__))
print('getsize():',os.path.getsize(__file__))
==========结果:
__file__: E:\juzicode\py3study\m04\os-test.py
getatime(): 1593970493.9610956
getmtime(): 1593970491.1732953
getctime(): 1593624515.381883
getsize(): 2164
9 重命名文件 os.rename(path1,path2)
path1是要复制的文件路径;path2是目标文件路径
print('重命名文件')
ret = os.rename('test.txt','juzicode.txt')
print('rename():',ret)
==========结果:
重命名文件
rename(): None
如果文件不存在,复制文件时会抛异常,提示文件不存在:
File “E:\juzicode\py3study\m04-os\os-test.py”, line 91, in
ret = os.rename(‘test.txt’,’juzicode.txt’)
FileNotFoundError: [WinError 2] 系统找不到指定的文件。: ‘test.txt’ -> ‘juzicode.txt
10 删除文件 os.remove(path)
path是要删除的文件路径
print('删除文件')
ret = os.remove('juzicode.txt')
print('remove():',ret)
==========结果:
删除文件
remove(): None
11 shutil模块
复制文件shutil.copyfile(src,dest)
在os模块中没有复制文件的函数,复制文件可以调用shutil模块的copyfile()函数,该函数调用成功后返回目标文件的路径:
import shutil
ret = shutil.copyfile('test.txt','juzicode.txt')
print('ret:',ret)
==========结果:
ret: juzicode.txt
12 创建目录
os.mkdir()创建单层目录,必须保证最后一层目录之前的路径是存在的。os.makedirs()则可以用来创建多层目录。
print('创建多层目录')
ret = os.makedirs('a1\\b\\c\\d\\e')
print('makedirs():',ret)
更多精彩在这里,后台回复“python教程”可以获取本文源码: