Python Day 18 time模块、datetime模块、os模块、os.path模块

  阅读目录

    时间模块(time、datetime)

    日历模块(calendar)

    sys模块

    os模块

    os.path模块

  ##时间模块

# #time模块:时间戳、结构化的时间、格式化的字符串时间
# #1、时间戳(timestamp):通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。我们运行“type(time.time())”,返回的是float类型。
# #2、格式化的时间字符串(Format String)
# #3、结构化的时间(struct_time):struct_time元组共有9个元素共九个元素:(年,月,日,时,分,秒,一年中第几周,一年中第几天,是否是夏令时)
# #4、英文显示   'Mon Jan 26 00:52:24 1970' ----》format默认为:"%a %b %d %H:%M:%S %Y"

import datetime
import time
#时间戳 1557227892.3337016
print(time.time())
#将时间戳转换为本地时区结构化时间元组 struct_time
print(time.localtime())
#将时间戳转换为UTC时区结构化时间元组 struct_time
print(time.gmtime())
#将一个struct_time转化为时间戳 ---> 1557229253.0
print(time.mktime(time.localtime()))
#结构化时间转为格式化输出时间 2019-05-07 19:38:23
print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())))
#把一个格式化时间字符串转化为struct_time。实际上它和strftime()是逆操作
time.struct_time(tm_year=2019, tm_mon=5, tm_mday=7, tm_hour=19, tm_min=38, tm_sec=23, tm_wday=1, tm_yday=127, tm_isdst=-1)
print(time.strptime('2019-05-07 19:38:23','%Y-%m-%d %X'))
#结构化时间转为英文格式输出、无参默认传入结构化时间time.localtime()
print(time.asctime())#Tue May  7 19:48:26 2019
print(time.asctime(time.localtime()))
print(time.asctime(time.localtime(time.time())))
#将时间戳转为英文格式输出、无参默认传入时间戳time.time()
print(time.ctime())
print(time.ctime(time.time()))


#获得当前时间 2019-05-07 19:56:56.738921
print(datetime.datetime.now())
#时间戳格式time.time()转为日期格式 2019-05-07
print(datetime.date.fromtimestamp(time.time()))
#获得三天后时间2019-05-10 20:03:08.253856
print(datetime.datetime.now() + datetime.timedelta(3))
#获得三天前的时间2019-05-04 20:03:54.933696
print(datetime.datetime.now() + datetime.timedelta(-3))
#获得当前时间+3小时 2019-05-07 23:04:29.103221
print(datetime.datetime.now() + datetime.timedelta(hours=3))
#获得当前时间+30分钟 2019-05-07 20:35:01.856802
print(datetime.datetime.now() + datetime.timedelta(minutes=30))

c_time  = datetime.datetime.now()
print(c_time.replace(minute=3,hour=2)) #时间替换

print( datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'))
print(datetime.datetime(2014, 8, 15, 9, 57, 52, 779893))
print(datetime.datetime.today())#2019-05-07 20:13:31.223521
%y 两位数的年份表示(00-99%Y 四位数的年份表示(000-9999%m 月份(01-12%d 月内中的一天(0-31%H 24小时制小时数(0-23%I 12小时制小时数(01-12%M 分钟数(00=59%S 秒(00-59%a 本地简化星期名称
%A 本地完整星期名称
%b 本地简化的月份名称
%B 本地完整的月份名称
%c 本地相应的日期表示和时间表示
%j 年内的一天(001-366%p 本地A.M.或P.M.的等价符
%U 一年中的星期数(00-53)星期天为星期的开始
%w 星期(0-6),星期天为星期的开始
%W 一年中的星期数(00-53)星期一为星期的开始
%x 本地相应的日期表示
%X 本地相应的时间表示
%Z 当前时区的名称
%% %号本身

  ##日历模块(calendar)

import calendar
#判断是否是闰年
print(calendar.isleap(2019))
#查看某年某月日历
print(calendar.month(2018,8))

c = calendar.calendar(2017)
c = calendar.TextCalendar()
c = calendar.HTMLCalendar()
print(c)
#返回两个整数。第一个是该月的首日所在星期的日期码(0~6),每周的起始日期码0(星期一)到6(星期日),第二个是该月的天数(28-31)
print(calendar.monthrange(2019, 5))
#查看某年某月某日是星期几
print(calendar.weekday(2017, 7, 23))

  ##sys模块

#1 sys.argv           命令行参数List,第一个元素是程序本身路径
#2 sys.exit(n)        退出程序,正常退出时exit(0)
#3 sys.version        获取Python解释程序的版本信息
#4 sys.maxint         最大的Int值
#5 sys.path           返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
#6 sys.platform       返回操作系统平台名称

#示例
import sys
import os.path
print(sys.argv)#['C:/untitled1/第十八天/第十八天.py']
def f1():
    print('执行自动化打印方法')
def f2():
    print('执行自动化移动方法')
def copy_file(old,new):
    # print('将%s复制成%s'%(old,new))
    new_file = os.path.join(new,'new.py')
    with open(old,'rb') as rf,open(new_file,'wb') as wf:
        for line in rf:
            wf.write(line)
cmd_map ={
    'print':f1,
    'move':f2,

}
if len(sys.argv) >1:
    cmd=sys.argv[1]
    if cmd in cmd_map:
        cmd_map[cmd]()
if len(sys.argv) ==4:
    if sys.argv[1] =='copy_file' :
        old = sys.argv[2]
        new = sys.argv[3]
        # copy_file(old,new)

        if os.path.isfile(old) and os.path.isdir(new):
            copy_file(old,new)
#在命令行输入

python3 C:untitled1第十八天第十八天.py print python3 C:untitled1第十八天第十八天.py copy_file C:untitled1user_info C:untitled1第十八天

  ##os.path 模块

#执行文件的当前路径:__file__
#返回path规范化的绝对路径:os.path.abspath(path)  
#将path分割成目录和文件名二元组返回:os.path.split(path)  
#上一级目录:os.path.dirname(path) 
#最后一级名称:os.path.basename(path)
#指定路径是否存在:os.path.exists(path)
#是否是绝对路径:os.path.isabs(path)
#是否是文件:os.path.isfile(path)
#是否是路径:os.path.isdir(path) 
#路径拼接:os.path.join(path1[, path2[, ...]])
#最后存取时间:os.path.getatime(path)
#最后修改时间:os.path.getmtime(path)
#目标大小:os.path.getsize(path)

normcase函数
在Linux和Mac平台上,该函数会原样返回path,在windows平台上会将路径中所有字符转换为小写,并将所有斜杠转换为饭斜杠。
>>> os.path.normcase('c:/windows\system32\')  
'c:\windows\system32\'  
  
normpath函数
规范化路径,如..和/
>>> os.path.normpath('c://windows\System32\../Temp/')  
'c:\windows\Temp'  

>>> a='/Users/jieli/test1/\a1/\\aa.py/../..'
>>> print(os.path.normpath(a))
/Users/jieli/test1
 
import os.path
#C:/untitled1/第十八天/第十八天.py
print(__file__)
#C:untitled1第十八天
第十八天.p
res = os.path.abspath('C:\untitled1第十八天第十八天.py')
res1 = os.path.abspath('C:/untitled1第十八天第十八天.py')
res2 = os.path.abspath(r'C:untitled1第十八天第十八天.py')
res3 = os.path.abspath('C:/untitled1第十八天\n第十八天.py')


print(res3)

#('C:\untitled1', '第十八天')
res=os.path.split(r'C:untitled1第十八天')
print(res)
print(res[1])#第十八天

#上一级C:/untitled1/第十八天
print(os.path.dirname(__file__))
print(os.path.dirname(os.path.dirname(__file__)))#C:/untitled1

BASE_DIR = os.path.dirname(os.path.dirname(__file__))
print(BASE_DIR)#该项目根目录是在执行时自动获取的当前项目根目录的绝对路径
#案例:项目根目录的应用场景
import sys
sys.path.append(BASE_DIR)#所有的导包/模块兜里来BASE_DIR
print(sys.path)

#最后一级名称   第十八天.py
print(os.path.basename(r'C:untitled1第十八天第十八天.py'))
#路径拼接
new_path = os.path.join(BASE_DIR,'第十七天','pgk','test.py')
print(os.path.exists(new_path)) #判断是否存在
print(os.path.isabs(new_path))#判断是否是绝对路径
print(os.path.isfile(new_path))#判断是否是文件
print(os.path.isdir(new_path))#判断是否是文件夹/目录
#获取文件大小
print(os.path.getsize(r'C:untitled1第十八天
ew.py'))
#
file_path = r'C:untitled1第十八天第十八天.py'
print(os.path.getctime(file_path))#创建时间
print(os.path.getatime(file_path))#访问时间
print(os.path.getmtime(file_path))#修改时间

  ##os模块

#生成单级目录:os.mkdir('dirname')
#生成多层目录:os.makedirs('dirname1/.../dirnamen2')
#重命名:os.rename("oldname","newname") 
#工作目录:os.getcwd()
#删除单层空目录:os.rmdir('dirname')
#移除多层空目录:os.removedirs('dirname1/.../dirnamen') 
#删除文件:os.remove(file)
#列举目录下所有资源:os.listdir('dirname')
#路径分隔符:os.sep
#行终止符:os.linesep
#文件分隔符:os.pathsep
#操作系统名:os.name
#操作系统环境变量:os.environ
#执行shell脚本:os.system() 

#示例
import os
# os.mkdir('abc')#在当前文件所在路径下创建abc文件夹
# os.mkdir('D:\abc')#在绝对路径下创建
#不能递归创建,文件夹c前面不存在报错
# os.mkdir('a/b/c')
#递归创建
# os.makedirs(r'ac')
#重命名
# os.rename('a','aa')
# #删除空目录,不空无法删除
# os.rmdir('aa/b/c')
# os.removedirs('aa/b/c')
#删除文件,
os.remove()
 

  ##跨文件移动文件

import os
import sys
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
sys.path.append(BASE_DIR)

def move_file(file, folder):
    if not (os.path.exists(file) and os.path.isfile(file)):
        print('文件不存在或非法')
        return False
    if not os.path.exists(folder):
        os.makedirs(folder)
    file_name = os.path.split(file)[1]
    # file_name = os.path.basename(file)
    new_file = os.path.join(folder, file_name)

    with open(file, 'rb') as rf, open(new_file, 'wb') as wf:
        for line in rf:
            wf.write(line)

    os.remove(file)

# 将目标文件夹下的目标文件移动到指定文件夹下
file = os.path.join(BASE_DIR, 'part5', 'mm.py')
folder = os.path.join(BASE_DIR, 'part6', 'abc')
move_file(file, folder)

  ##递归删除的思路

def delete_dir(folder):
    for path in os.listdir(folder):
        # 如果path是文件夹 delete_dir(path)
        # 如果是文件os.remove(path)
        pass
    # for走完了代表folder内部删空了,可以删folder

  ##递归遍历打印目标路径中所有的txt文件

def print_txt(folder):
    if not os.path.exists(folder) or os.path.isfile(folder):
        return
    for path in os.listdir(folder):
        file_path = os.path.join(folder, path)
        if os.path.isfile(file_path) and file_path.endswith('.txt'):
            print(path)
        elif os.path.isdir(file_path):
            print_txt(file_path)  # 递归


target_path = os.path.join(BASE_DIR, 'part6', 'target')
print_txt(target_path)

  ##项目开放周期

1.调研
2.需求分析
3.架构师完成项目demo,完成项目架构
4.分工
5.写代码
6.白盒黑盒测试
7.项目审核发布 => 项目 -> 产品
#项目下文件名称及作用
bin: 可执行文件,入口,入口也可以放在项目根目录下 core: 核心代码 db:数据库相关文件 interface:接口 lib:包、模块、第三方文件夹 log:日志 setting:配置 static:静态文件
原文地址:https://www.cnblogs.com/liangzhenghong/p/10828042.html