5.2 Python3 进阶 - 目录操作
>>返回主目录
源码
import os
print('当前文件绝对路径是:', os.getcwd()) # 获取当前Python脚本的目录路径
os.chdir('D:\\') # 切换到D盘根目录
print('切换路径后,再次查看当前绝对路径:', os.getcwd())
# os的常用属性:
print(os.curdir) # 获取当前路径,也就是 '.'
print(os.pardir) # 获取当前目录的父目录 '..'
print(os.sep) # 用来分隔文件路径名的字符串(反斜杠 '\')
print(os.altsep) # 用来分隔文件路径名的字符串(斜杠 '/')
print(os.pathsep) # 用来分隔文件路径的字符串(分号';')
print(os.environ) # 获取环境变量字典值
print(os.name) # 获取当前使用的操作系统类型(其中'nt'是windows,'posix'是linux或者unix)
源码
print(os.listdir('D:/'))
os.mkdir('dir_name') # 在当前目录创建dir目录
os.makedirs('dir0/dir1/dir2', exist_ok=True) # 目录有重复不会报错
os.rmdir('dir0/dir1') # 只删除dir2空目录
os.removedirs('dir0/dir1') # 删除dir1和dir0空目录
源码
os.remove('dir/test.txt') # 删除指定文件test.txt
os.rename('dir0/dir1/dir2', 'dir0/dir1/dir2_name') # 重命名目录dir2->dir2_name
os.renames('dir_rename/ttt', 'dir_rename0/xxx') # 重命名目录dir_rename->dir_rename0, 文件ttt->xxx
print('获取环境变量:', os.getenv('path')) # 推荐使用
print('获取环境变量:', os.environ.get('path'))
os.environ['key2'] = 'value2' # 推荐使用,设置临时环境变量值
源码
import stat
import sys
os.chmod('./test.txt', stat.S_IREAD) # 修改文件权限为只读
os._exit(0) # 0:正常推出,1:异常退出 不推荐使用
print('后面不执行,需注释退出代码!')
sys.exit(0) # 推荐使用此退出方法退出程序
os.system('dir') # Windows下dir等,Linux下ls等
fp = os.popen('dir') # 返回一个文件对象
print('读取文件内容:', fp.readlines())
源码
# Author:PortosHan
# Datetime:2021/12/9 17:54
# Project:zbcf_python_lesson_project
"""
练习:分别打印出指定目录内所有的文件名和目录名,并统计出所有文件和目录的数量
思路:
1、递归遍历出指定目录
2、循环打印出上一步返回的文件列表和目录列表
3、循环内部加入计数变量
"""
import os
target_top = 'D:\Soft\PyCharm\zbcf_python_test_project\chapter_5'
def count_dirs_files_1(top):
file_count = 0
dir_count = 0
gt = os.walk(top, topdown=False) # 返回generate生成器
for cur_top, dirs, files in gt:
print(cur_top, dirs, files)
print('当前目录是:', cur_top)
for cur_dir in dirs:
print('当前目录下的文件夹有:', cur_dir)
dir_count += 1
for cur_file in files:
print('当前目录下的文件有:', cur_file)
file_count += 1
print('-' * 80)
print(f'文件夹共有:{dir_count}个,文件共有{file_count}个')
def count_dirs_files_2(top):
file_count = 0
dir_count = 0
gt = os.walk(top, topdown=False)
for cur_top, dirs, files in gt:
print('cur_top:', cur_top)
print('dirs:', dirs)
print('files:', files)
file_count += len(files)
dir_count += len(dirs)
print('*' * 80)
print(f'文件夹共有:{dir_count}个,文件共有{file_count}个')
count_dirs_files_1(target_top)
count_dirs_files_2(target_top)
源码
print(os.path.abspath('test.txt')) # 默认当前路径进行拼接
print(os.path.exists('test.txt')) # 路径存在,返回True
print(os.path.getctime('test.txt')) # 时间戳格式
print(os.path.getmtime('test.txt')) # 时间戳格式
print(os.path.getsize('test.txt')) # 文件字节大小
源码
print(os.path.isfile('test.txt')) # 判断当前路径是文件,存在返回True
print(os.path.isdir('test.txt')) # 判断当前路径是目录,不存在返回False
print(os.path.join('D:\\', 'test.txt')) # 把目录和文件名合成一个路径:D:\\test.txt
print(os.path.normpath('chapter_5\lesson_2/test.txt')) # chapter_5\lesson_2\test.txt
print(os.path.split('chapter_5/lesson_2/test.txt')) # ('chapter_5/lesson_2', 'test.txt')
源码
# Author:PortosHan
# Datetime:2021/12/9 18:25
# Project:zbcf_python_test_project
import os
import re
import requests
def format_name(str_name):
"""转义命名中的非法字符"""
pattern = r'[\\/:*?"<>|]'
new_name = re.sub(pattern, '_', str_name)
return new_name
def make_dir():
"""若不存在,则创建指定video目录"""
dir_name = 'video'
if not os.path.exists(dir_name):
os.mkdir(dir_name)
return dir_name
def download_mp4_video():
"""爬取某网站的小视频"""
url = 'https://v.6.cn/minivideo/getMiniVideoList.php?act=recommend&page=1&pagesize=30'
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'}
response = requests.get(url, headers).json() # 请求接口,获得返回数据
content_list = response['content']['list'] # 获取返回数据中的list列表数据
# 循环遍历出,所有的MP4地址playurl
for data in content_list:
video_title = data['title']
video_url = data['playurl']
# 格式化MP4文件名
format_video_title = format_name(video_title) + '.mp4'
# 请求MP4地址,获取返回的数据流
video_response = requests.get(video_url, headers).content
# 下载保存数据流
with open(f'{make_dir()}\\{format_video_title}', 'wb') as fp:
fp.write(video_response)
print('全部下载完成!')
download_mp4_video()
>>返回主目录
作者: PortosHan
出处: https://www.cnblogs.com/PortosHan/
关于作者:专注于软件测试、测试开发等领域,请多多赐教!
本文版权归作者和博客园共有,欢迎转载,但必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。 原文链接 如有问题,可邮件(bhanzdan@163.com)咨询。