Python基础_Day10

1.听写

1.使用列表生成式生成列表
原列表: ["hello", "jack", True, 10, "look"] 提取字符串数据
	list2 = [item for item in list0 if isinstance(item, str)]
	print(list2)	
2.利用高阶函数 完成上述的筛选
	list(filter(lambda x: isinstance(x,str), list0))

2.今日概述

常用模块:

time

datetime

calendar

os ---> 操作计算机文件的

文件读写[普通文件的读写]

3.time

关于时间的模块

导入模块 import time

import time
# 获得当前时间 ---> 对应的时间元组
tuple_time = time.localtime()
print(tuple_time)

# 在时间元组中获得对应每一个想要获取的内容
#1.通过脚标
year = tuple_time[0]
print(year)

#2.通过字段名来获取
year = tuple_time.tm_year
print(year)

# 获得当前时间对应的描述 [时间戳] 距离1970年1月1日凌晨的秒数
current_second = time.time()
print(current_second)

'''
涉及到知识点 时间格式化
第一个参数放置的是时间格式化
第二个参数是要进行时间格式化的元组
'''
format_time = time.strftime("%Y/%m/%d %H:%M:%S %j %A", tuple_time)
print(format_time)

# 将对应指定的格式化后的时间转化为时间元组
format_time_1 = "2018-09-05 10:45:32"
tuple_time_1 = time.strptime(format_time_1, "%Y-%m-%d %H:%M:%S")
print(tuple_time_1)

# 获得自定义时间对应的秒数
cus_second = time.mktime(tuple_time_1)
print(cus_second)

# 将时间戳转换为时间元组
cus_tuple = time.localtime(cus_second)
print(cus_tuple)

'''
根据指定的格式化时间 获得其三天后对应的时间
2018-05-02 17:22:33 ---> 2018-05-05 17:22:33
'''
def get_delay_daytime(format_timestr, days):
    # 将格式化的时间转化为时间元组
    time_tuple = time.strptime(format_timestr, "%Y-%m-%d %H:%M:%S")
    # 将时间元组转化为时间戳
    time_seconds = time.mktime(time_tuple)
    # 在时间戳的基础上夹加上days对应的秒数
    end_seconds = time_seconds + days * 24 * 3600
    # 在最后时间戳的基础上转化为时间元组
    end_time_tuple = time.localtime(end_seconds)
    # 根据时间元组转化为最终的格式化时间
    end_format_time = time.strftime("%Y-%m-%d %H:%M:%S", end_time_tuple)
    return end_format_time
res = get_delay_daytime("2018-05-02 17:22:33", 3)
print(res)

4.datetime

import datetime
#1. 获取当前时间
current_time = datetime.datetime.now()
print(current_time)

#2. 获得当天的日期
current_day = datetime.date.today()
print(current_day)

#3. 根据获得的日期 获得星期数
week = current_day.weekday()
print(week)

# 自定义时间
# 时分秒 不传的话 默认是凌晨
cus_time = datetime.datetime(2018, 6, 27)
print(cus_time)

cus_time = datetime.datetime(2018, 6, 27, 10, 34, 51)
print(cus_time)

# 获得自定义时间 两天前对应的时间
get_time = cus_time + datetime.timedelta(days=3)
print(get_time)
print(type(cus_time))

# 时间格式化字符串类型
format_time = get_time.strftime("%Y/%m/%d %p %I:%M:%S")
print(format_time)

# 将格式化的时间转化为datetime的时间
time_date = datetime.datetime.strptime(format_time, "%Y/%m/%d %p %I:%M:%S")
print(time_date)

# 求两个时间的时间差
time1 = datetime.datetime(2018, 7, 12, 12, 22, 18)
time2 = datetime.datetime(2018, 8, 7, 10, 32, 19)
defferent_time = time2 - time1
print(defferent_time)

# 获得时间差中的天数
day = defferent_time.days
print(day)

# 获得时间差中的总秒数
seconds = defferent_time.total_seconds()
print(seconds)

5.calendar

import calendar
# 获得指定年的日历
year_calendar = calendar.calendar(2018)
print(year_calendar)

# 获得指定某个月的日历格式
month_calendar = calendar.month(2018, 8)
print(month_calendar)

# 判断年的平润性
is_leap = calendar.isleap(1998)
print(is_leap)

# 获得列表 列表中存放的是日期对应的数据格式
res = calendar.monthcalendar(2018, 8)
print(res)

# 获得某天对应星期
res = calendar.weekday(2018, 8, 1)
print(res)	# [0, 6] 0表示星期一

6.os

import os
#1. 获得当前计算机操作系统的名字
sys_name = os.name
print(sys_name)
#nt ---> windows,posix ---> Mac/Linux

#2. 获得操作系统对应的信息 window系统不支持
sys_info = os.uname()
print(sys_info)
'''
"/Applications/Python 3.7/IDLE.app/Contents/MacOS/Python" /Users/chenxin/Desktop/Fighting。/D11/practice.py
posix.uname_result(sysname='Darwin', nodename='localhost', release='17.5.0', version='Darwin Kernel Version 17.5.0: Mon Mar  5 22:24:32 PST 2018; root:xnu-4570.51.1~1/RELEASE_X86_64', machine='x86_64')
'''
#3. 获得设置的环境变量
environ = os.environ
print(environ)

#4. 获得指定字段设置的环境变量的值
path_value = os.environ.get("path")
print(path_value)

r'''
路径的分类:
    绝对路径
        从盘符开始 到具体指定的某个文件的路径
        r"c:\users\11143\documents\课堂内容\BJ_Python1811\nay11\Day11\os_pack\os_demo.py"
    相对路径
        参照物的 ---> 当前文件所在目录
        .       ---> 当前文件所在目录
        ..      ---> 当前文件所在的上一级目录
        目录系统
            Day11
                os_pack [现在所在的目录]
                    os_demo.py
                    os_demo1.py 
                time_pack
                    time_demo.py
                    datetime_demo.py
                    calendar_demo.py
                listen.py
                ..\time_pack\time_demo.py
            ..\listen.py
            os_demo1.py
'''
# 获得当前文件所在的目录
dir_path = os.curdir
print(dir_path)		# . 当前路径 相对路径中

# 当前文件所在的绝对目录 C:\Users\11143\Documents\讲课内容\BJ_Python1811\day11\Day11\os_pack
absolute_path = os.getcwd()
print(absolute_path)

# 格式化 多行注释也可以单做字符串显示
res = '''
要保持数据的原有书写格式
例如:
换行也要显示出来出来
'''
print("要保持数据的原有书写格式\n例如:\n换行也要显示出来出来")
print(res)


# 获得指定目录下所有直接子文件或则子目录的名字
# 相对路径 使用项目中某些文件最好使用相对路径
# path = r".."
# 绝对路径
path = r"C:\Users\11143\Documents\讲课内容\BJ_Python1811\day11\Day11"
file_list = os.listdir(path)
print(file_list)

'''
1. 创建目录
    mkdir ---> make directory
'''
# 参数放置的是路径 如果只写了一个名字 利用相对路路径
# os.mkdir("test_dir") 如果已经存在 就不能再使用该方法创建了
# 如果使用绝对路径 只能创建最后一级目录
# os.mkdir(r"C:\Users\11143\Documents\讲课内容\BJ_Python1811\day11\Day11\os_pack\test_abs")
path = r"test_dirs_1\test_dirs_subdir"
# 创建多级目录
# os.makedirs(path)

# 删除目录:只能删除最后一级目录 而且该目录必须是一个空目录
# os.rmdir(path)

# 打开文件 生成一个与文件关联的操作手柄
'''
如果打开模式是r读的形式 该文件必须存在
模式 mode:
    r  --- 只读
    w  --- 只写
    		如果文件不存在 会创建文件
    		如果文件存在 会先清除掉文件中的内容 再写入
    a  --- 只写
        	如果文件不存在 会创建文件
        	如果文件存在 会在原有内容的基础上 进行追加
    b  --- 以字节的形式进行操作
    rb --- 以内容的字节数据的格式 读取文件中的内容
    wb / ab --- 以内容的字节数据的格式 向文件中写入内容
    			"你好".encode("gbk")
    +  --- 可以操作读写
        r+
        w+
        rb+
        wb+
        a+
        ab+
'''
handle = open(r"..\listen1.py", "w")
print(handle)

# 移除文件
os.remove(r"..\listen1.py")

# 获得文件的信息
info = os.stat(r"..\listen.py")
print(info)

# 重命名
os.rename("test_abs", "test")
os.rename(r"..\listen.py", r"..\lis.py")
'''
在os.path下 有对应的一些操作
'''
#1. 获得指定目录所在的绝对路径
abs_path = os.path.abspath(r"..")
print(abs_path)

#2.路径拼接
join_path = os.path.join(abs_path, r"os_pack\os_demo.py")
print(join_path)

#3.获得指定路径对应的扩展名
# 在扩展名处进行切割 得到是一个元组 第一个值文件的路径到文件名 第二个值就是文件的后缀名
extend_name = os.path.splitext(join_path)
print(extend_name[1])

#4.获得文件的名字 / 获得最后一级的名字
base_name = os.path.basename(join_path)
print(base_name)

#5.获得除了最后一级之外的名字
dir_name = os.path.dirname(join_path)
print(dir_name)

#6.获得指定文件所占大小
file_size = os.path.getsize(join_path)
print(file_size)

#关于判断的
#1. 判断指定路径是否是绝对路径
res = os.path.isabs(join_path)
print(res)

#2. 判断指定路径是否是文件夹
res = os.path.isdir(join_path)
print(res)

#3. 判断指定路径是否是文件
res = os.path.isfile(join_path)
print(res)

#4. 判断指定路径是否在计算机中存在
path = r"..\lis1.py"
res = os.path.exists(path)
print(res)

7.深度遍历和广度遍历

深度遍历:

扫描二维码关注公众号,回复: 5483115 查看本文章
从最外层 ---> 向内

借助栈遍历

栈的特点:  先进后出

	利用列表模拟栈

import os
def get_all_file(dir_path):
    # 声明一个空栈
    stack = []
    # 向栈中添加第一个需要遍历的目录
    stack.append(dir_path)
    # 遍历执行的条件:栈中有内容
    while len(stack) != 0:
        # 取出栈中的内容进行遍历
        path = stack.pop()
        # 获得该路径下所有子文件
        file_list = os.listdir(path)
        # 遍历
        for filename in file_list:
            join_path = os.path.join(path, filename)
            if os.path.isfile(join_path):
                print(join_path)
            elif os.path.isdir(join_path):
                stack.append(join_path)

get_all_file(r"..\test")
r'''
..\test
    遍历
        [subtest, subtest1]    
subtest1 ---> 栈中剩余[subtest]
        遍历subtest1
        [subtest, sub_subtest_A, sub_subtest_B]
sub_subtest_B --->栈中剩余[subtest, sub_subtest_A]
        遍历
sub_subtest_A --->栈中剩余[subtest]
        遍历
subtest ---> 栈中剩余[]
    遍历
        [sub_subtest_1, sub_subtest_2]
sub_subtest_2 ---> 栈中剩余[sub_subtest_1]
    遍历
sub_subtest_1栈中剩余[]
    遍历 
'''

广度遍历:

每一层先将同级的遍历完成

借助队列遍历

	队列: 先进先出

def get_all_file(dir_path):
    import os
    from collections import deque
    # 创建空队列
    queue = deque()
    # 向队列中介入第一节目录
    queue.append(dir_path)
    # 只要队列长度不为0 就一直遍历
    while len(queue) != 0:
        # 取出队列中的数据
        path = queue.popleft()
        file_list = os.listdir(path)
        for filename in file_list:
            join_path = os.path.join(path, filename)
            if os.path.isfile(join_path):
                print(join_path)
            elif os.path.isdir(join_path):
                queue.append(join_path)
get_all_file(r"..\test")

猜你喜欢

转载自blog.csdn.net/weixin_42076261/article/details/88379818