Python文件、目录、路径操作
类别: Python 实践 标签: Python File Directory Path目录
导入包
>>> import os
>>> import shutil
文件
拷贝文件
目录路径可以是目录名
>> shutil.copy('/home/python/main.py', '/home/python/main.py.bak') >> shutil.copy('/home/python/main.py', '/home/python/bak/')
创建文件
- 方法1
open(filename, 'w').close()
- 方法2
def touch(path): with open(path, 'a'): os.utime(path, None)
- 方法3
OS X需要root特权
os.mknod(filename)
修改文件名
>>> os.rename('filename', 'new_filename')
删除文件
>>> os.remove('/home/python/main.py')
目录
拷贝目录树
>>> shutil.copytree('/home/python/test', '/home/python/test_bak')
新建目录
- 单级目录
>>> os.mkdir('python')
- 多级目录
>>> os.makedirs('dirs/sub_dir')
修改目录名
只能修改叶子节点,有无文件都可以。
>> os.rename('dir', 'new_dir')
读取目录信息
- 当前目录
>>> os.getcwd() '/home/python'
- 列出文件和目录
>>> os.listdir('/home/python') ['app', 'config', 'main.py', 'test']
删除目录
- 空目录
>>> os.rmdir('test')
- 多级目录
>>> shutil.rmtree('/home/python')
获得目录下的图片文件路径
import os
def is_image(filename):
ext_names = ['.png', '.jpg', '.jpeg', '.tif', '.bmp']
return include_ext_names(filename, ext_names)
def include_ext_names(filename, ext_names):
_, ext_name = os.path.splitext(filename.lower())
if not ext_names or ext_name in ext_names:
return True
return False
def get_file_paths(path, filter):
paths = []
for filename in os.listdir(path):
if filter(filename):
paths.append(os.path.join(path, filename))
return paths
获得目录下的视频文件路径(包含子目录)
import os
def is_video(filename):
ext_names = ['.mov', '.mts', '.mp4', '.mkv', '.webm', '.flv', '.f4v', '.vob', '.ogg',
'.ogv', '.avi', '.wmv', '.rm', '.rmvb', '.asf', '.amv', '.m4v', '.3gp', '.mng']
return include_ext_names(filename, ext_names)
def include_ext_names(filename, ext_names):
_, ext_name = os.path.splitext(filename.lower())
if not ext_names or ext_name in ext_names:
return True
return False
def get_file_paths_by_iter(path, filter):
paths = []
for parent, _, filenames in os.walk(path):
if not filenames:
continue
for filename in filenames:
if filter(filename):
paths.append(os.path.join(parent, filename))
return paths
路径
文件名
>>> os.path.basename('/home/python/main.py')
'main.py'
>>> os.path.basename('/home/python')
'python'
>>> os.path.basename('/home/python/')
''
目录名
>>> os.path.dirname('/home/python/main.py')
'/home/python'
>>> os.path.dirname('/home/python')
'/home'
>>> os.path.dirname('/home/python/')
'/home/python'
路径是否存在
>>> os.path.exists('/home/python')
True
分离扩展名
>>> os.path.splitext('main.py')
('main', '.py')