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()

>>返回主目录

posted @ 2021-12-10 18:10  PortosHan  阅读(47)  评论(0编辑  收藏  举报