模块:在python的一个py文件,就可以理解为模块
不是所有的py文件都能作为模块进行导入
如果想让一个py文件能够被导入,模块名字必须要遵循命名规则。

Python本身自带很多内置模块,供开发者进行使用

直接导入模块

  1. import time

from 模块名 import 函数名

  1. from random import randint
  2. num1 = randint(0, 10)
  3. print(num1)

from math import *
import datetime as dt

math模块

  1. from math import * #导入这个模块中所有变量和方法

os模块

os模块全称 OperationSystem操作系统
os模块里提供的方法就是用来调用操作系统里的方法

  1. import os
  2. # os.name --> 获取操作系统的名字 windows系统/nt 非windows/posfix
  3. print(os.name)
  4. # 路径的分隔符
  5. print(os.sep)
  6. # 获取文件的绝对路径
  7. print(os.path.abspath('file.txt'))
  8. # isdir判断是否是文件夹
  9. print(os.path.isfile('a.txt'))
  10. # 判断是否存在
  11. print(os.path.exists('a.txt'))

>

  1. nt
  2. \
  3. E:\Pycharm\pythonProject\b.txt
  4. False
  5. True
  6. True

os里其他方法介绍

os.getcwd() #返回当前工作目录 os.chdir(path) #改变工作目录 os.listdir(path=dir_path) #列举指定目录中的文件名 os.mkdir(path) #创建建单层目录,如果该目录已存在则抛出异常 os.makedirs(path) #递归创建多层目录,如该目录已存在抛出异常 os.remove(path) #删除文件 os.rmdir(path) #删除单层目录,如该目录非空则抛出异常 os.removedirs(path) #递归删除目录,从子目录到父目录逐层尝试删除,遇到目录非空则抛出异常 os.rename(old,new) #将文件old重命名为new os.system(command) #运行系统shell命令 os.walk(top) #遍历top路径以下所有子目录,返回一个三元组:(路径,[包含目录],[包含文件]) os.curdir #属性,表示当前目录 os.pardir #属性,表示上一级目录 os.sep #属性,输出操作系统特定的路径分隔符(win下为’\‘,Linux下为’/‘) os.linesep #属性,当前平台使用的行终止符(Win下为‘\r\n’,Linux下为’\n’) os.name #属性,指待当前使用的操作系统

os.getcwd()、os.chdir(path)

  1. print(os.getcwd())
  2. path = r'E:\Pycharm'
  3. os.chdir(path)
  4. print(os.getcwd())

>

  1. E:\Pycharm\pythonProject
  2. E:\Pycharm

os.mkdir(path)

  1. path = r'E:\Pycharm\pythonProject\dir1'
  2. os.mkdir(path)
  3. # print(os.chdir(path))
  4. print(os.getcwd())

>

  1. E:\Pycharm\pythonProject\dir1

os.makedirs(path)

  1. path = r'E:\Pycharm\pythonProject\dir1\dir2\dir3'
  2. os.makedirs(path)
  3. os.chdir(path)
  4. print(os.getcwd())

>

  1. E:\Pycharm\pythonProject\dir1\dir2\dir3

os.mkdir(path)和os.makedirs(path)一般的使用:

  1. path = r'E:\Pycharm\pythonProject\dir1\dir2\dir3'
  2. if not os.path.exists(path):
  3. os.makedirs(path)
  4. else:
  5. print("目录已存在")

>

  1. 目录已存在

os.rmdir(path)

  1. path = r'E:\Pycharm\pythonProject\dir1\dir2\dir3'
  2. os.rmdir(path)
  3. os.chdir(path)

>

  1. E:\python3.8.8\python.exe E:/Pycharm/pythonProject/file.py
  2. Traceback (most recent call last):
  3. File "E:/Pycharm/pythonProject/file.py", line 12, in <module>
  4. os.chdir(path)
  5. FileNotFoundError: [WinError 2] 系统找不到指定的文件。: 'E:\\Pycharm\\pythonProject\\dir1\\dir2\\dir3'

os.removedirs(path)

  1. path = r'E:\Pycharm\pythonProject\dir1\dir2\test.txt'
  2. os.removedirs(path)
  3. print(os.path.isfile('E:\Pycharm\pythonProject\dir1\dir2\\test.txt'))

> ```python E:\python3.8.8\python.exe E:/Pycharm/pythonProject/file.py Traceback (most recent call last): File “E:/Pycharm/pythonProject/file.py”, line 11, in os.removedirs(path) File “E:\python3.8.8\lib\os.py”, line 241, in removedirs rmdir(name) NotADirectoryError: [WinError 267] 目录名称无效。: ‘E:\Pycharm\pythonProject\dir1\dir2\test.txt’

删除失败

  1. <a name="xTWA4"></a>
  2. #### os.listdir(path)
  3. ![image.png](https://cdn.nlark.com/yuque/0/2022/png/23214851/1650118204873-102537d7-fd0e-4085-8e1f-1669719f92ae.png#clientId=ua6e98e8a-26d5-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=223&id=u09e18450&margin=%5Bobject%20Object%5D&name=image.png&originHeight=279&originWidth=881&originalType=binary&ratio=1&rotation=0&showTitle=false&size=28333&status=done&style=none&taskId=u82b27ff0-af68-46b5-a9de-49a38081b3d&title=&width=704.8)
  4. ```python
  5. path = r'E:\Pycharm\pythonProject'
  6. a= os.listdir(path)
  7. print(a)

>

  1. ['.idea', 'a.txt', 'b.txt', 'dir1', 'file.py', 'main.py']

os.path.dirname(path)

  • 去掉文件名,返回目录

    1. path = r'E:\Pycharm\pythonProject\a.txt'
    2. print(os.path.dirname(path))

    >

    1. E:\Pycharm\pythonProject

    os.path.exists(path)

  • 判断文件或者目录是否存在。存在则返回True,否则返回False.

    1. path = r'E:\Pycharm\pythonProject\a.txt'
    2. print(os.path.exists(path))

    os.path.jion()

  • 用于路径拼接文件路径,可以传入多个路径

    1. print(os.path.join('abc', 'dir2', 'dir3'))

    >

    1. abc\dir2\dir3

    os.walk()

  • 遍历出所以文件夹和文件
    。 root 表示当前正在访问的文件夹路径(所指的是当前正在遍历的这个文件夹的本身的地址)
    。 dirs 表示该文件夹下的子目录名(返回list)
    。 files 表示该文件夹下的文件(返回list)

    1. path = 'E:\Pycharm\pythonProject'
    2. for root, dirs, files in os.walk(path):
    3. # print(root) # 输出目录
    4. for f in files:
    5. print(os.path.join(root, f)) # 将目录的绝对路径与文件连接,就组成了文件绝对路径
    6. for s in dirs:
    7. print(os.path.join(root, s)) # 将目录的绝对路径与子目录连接,就组成了子目录绝对路径

    >

    1. E:\python3.8.8\python.exe E:/Pycharm/pythonProject/file.py
    2. E:\Pycharm\pythonProject\a.txt
    3. E:\Pycharm\pythonProject\b.txt
    4. E:\Pycharm\pythonProject\file.py
    5. E:\Pycharm\pythonProject\main.py
    6. E:\Pycharm\pythonProject\.idea
    7. E:\Pycharm\pythonProject\dir1
    8. E:\Pycharm\pythonProject\.idea\.gitignore
    9. E:\Pycharm\pythonProject\.idea\misc.xml
    10. E:\Pycharm\pythonProject\.idea\modules.xml
    11. E:\Pycharm\pythonProject\.idea\pythonProject.iml
    12. E:\Pycharm\pythonProject\.idea\workspace.xml
    13. E:\Pycharm\pythonProject\.idea\inspectionProfiles
    14. E:\Pycharm\pythonProject\.idea\inspectionProfiles\profiles_settings.xml

    shutil模块

    copy:只复制内容,但不会复制permission和last-modify-time等。
    copystat:不复制文件内容,只复制源文件的permission和last-modify-time等到目标文件。
    copy2:相当于调用copy之后,再调copystat。

copy()模块

  • 功能:复制文件
  • 格式:shutil.copy(src,dst)
  • 参数:src表示来源文件,dst表示目标地址
  • 返回值:复制之后的路径

image.png

  1. import shutil
  2. src = r'E:\Pycharm\pythonProject\a.txt'
  3. dst = 'E:\Pycharm'
  4. print(shutil.copy(src, dst))

>

  1. E:\Pycharm\a.txt

image.png

copy2()

  • 功能:复制文件,保留元数据
  • 格式:shutil.copy2(src,dst)
  • 参数:src表示来源文件,dst表示目标地址
  • 返回值:复制之后的路径

    copyfileobj()

  • 功能:将一个文件的内容拷贝的另外一个文件当中

  • 格式:格式: shutil. copyflleobj(open(src,‘r’),open( dst,‘w’) )
  • 参数:src表示来源文件,dst表示目标文件
  • 返回值:无

image.png

  1. import shutil
  2. src = r'E:\Pycharm\pythonProject\a.txt'
  3. dst = r'E:\Pycharm\pythonProject\dir1\b.txt'
  4. # print(shutil.copyfileobj(src, dst))
  5. print(shutil.copyfileobj(open(src, 'r', encoding='utf-8'), open(dst, 'w', encoding='utf-8')))

>

  1. None

image.png

copyfile()

  • 功能:将一个文件的内容拷贝的另外一个文件当中
  • 格式:格式: shutil. copyflle(src, dst) )
  • 参数:src表示来源文件,dst表示目标文件
  • 返回值:目标文件的路径,copyfile()和copyfileobj()如果目标文件原来没有,则会创建一个。 ```python import shutil

src = r’E:\Pycharm\pythonProject\a.txt’ dst = r’E:\Pycharm\pythonProject\dir1\b.txt’

print(shutil.copyfileobj(src, dst))

print(shutil.copyfileobj(open(src, ‘r’, encoding=’utf-8’), open(dst, ‘w’, encoding=’utf-8’)))

shutil.copyfile(src, dst)

  1. <a name="dy5Gz"></a>
  2. ##### copyfileobj()和copyfile()的区别
  3. > copyfileobj()得使用open打开文件,而copyfile()则不用
  4. > copyfileobj()更加灵活,可以在目标文件追加内容
  5. > copyfile()则更加方便,但是如果目标文件有内容,则会被覆盖
  6. <a name="d72PE"></a>
  7. #### copytree()
  8. - 功能:复制整个文件目录
  9. - 格式:格式: shutil. copytree(src, dst) )
  10. - 参数:src表示来源目录,dst表示目标目录
  11. - 返回值:目标目录的路径<br />**注意:无论文件夹是否为空,均可以复制,而且会复制文件夹中的所有内容**
  12. ![copytree](/uploads/projects/Python-newbie-guide/202206/16f784ef4103636b.png "copytree")
  13. ```python
  14. import shutil
  15. src = r'E:\Pycharm\pythonProject\dir1'
  16. dst = r'E:\Pycharm\pythonProject\dir2'
  17. shutil.copytree(src, dst)


shutil shutil

rmtree()

  • 功能:移除整个目录,无论是否空
  • 格式: shutil. rmtree(目录路径)
  • 返回值:无 ```python import shutil

src = r’E:\Pycharm\pythonProject\dir1’ dst = r’E:\Pycharm\pythonProject\dir2’

print(shutil.copyfileobj(src, dst))

print(shutil.copyfileobj(open(src, ‘r’, encoding=’utf-8’), open(dst, ‘w’, encoding=’utf-8’)))

shutil.copyfile(src, dst)

shutil.rmtree(dst)

  1. ![shutil](/uploads/projects/Python-newbie-guide/202206/16f785054ce457d5.png "shutil")
  2. <a name="dW821"></a>
  3. #### move()
  4. - 功能:移动文件或者文件夹
  5. - 格式: shutil. move(src, dst) )
  6. - 参数: src表示来源地址,dst表示目标地址
  7. - 返回值:目标地址
  8. ```python
  9. import shutil
  10. src = r'E:\Pycharm\pythonProject\dir1'
  11. dst = r'E:\Pycharm\pythonProject\dir2'
  12. # print(shutil.copyfileobj(src, dst))
  13. # print(shutil.copyfileobj(open(src, 'r', encoding='utf-8'), open(dst, 'w', encoding='utf-8')))
  14. # shutil.copyfile(src, dst)
  15. shutil.move(src, dst)

shutil

which()

  • 功能:检测命令对应的文件路径
  • 格式: shutil.which( ‘命令字符串’)
  • 返回值:命令文件所在位置 ```python import shutil

src = r’E:\Pycharm\pythonProject\dir1’

dst = r’E:\Pycharm\pythonProject\dir2’

print(shutil.copyfileobj(src, dst))

print(shutil.copyfileobj(open(src, ‘r’, encoding=’utf-8’), open(dst, ‘w’, encoding=’utf-8’)))

shutil.copyfile(src, dst)

shutil.move(src, dst)

print(shutil.which(‘cmd’))

  1. >>>
  2. ```python
  3. C:\Windows\system32\cmd.EXE

make_archive压缩

  1. # 将 /home/shark 目录下的所以文件打包压缩到当前目录下,
  2. # 名字 shark,格式 gztar。扩展名会自动根据格式自动生成。
  3. [root@python-server ~]# cat date.py
  4. import shutil
  5. shutil.make_archive('feige', # 压缩后文件名
  6. 'gztar', # 指定的压缩格式
  7. '/home/feige') # 被压缩的文件夹名字
  8. # 将 /home/shark 目录下的所以文件打包压缩到 /tmp 目录下,名字shark,格式 tar
  9. shutil.make_archive( '/tmp/feige','tar','/home/shark/')
  10. # 查看当前 python 环境下支持的压缩格式
  11. ret = shutil.get_archive_formats()
  12. print(ret)


image.png

sys模块

sys.version

获取Python解释程序的版本信息

  1. import sys
  2. print(sys.version)


image.png

sys.platform

返回操作系统平台名称

  1. import sys
  2. print(sys.platform)


image.png

sys.stdin.readline()与input

  1. import sys
  2. # sys.stdin.readline() 相当于input,区别在于input不会读入'\n'
  3. str1 = sys.stdin.readline()
  4. str2 = input('请输入:')
  5. print(len(str1))
  6. print(len(str2))


image.png 还有一个区别在于,input()里面可以直接传入文本,然后打印出来。sys.stdin.readline()中并不能传入文本

sys.stdout与print

  1. import sys
  2. sys.stdout.write('hello' + '\n')
  3. print('hello')

上面的两种打印方式是等价的,例如:

  1. import sys
  2. # sys.stdout.write('hello' + '\n')
  3. # print('hello')
  4. aa = sys.stdin.readline()
  5. bb = input('请输入: ')
  6. sys.stdout.write(str(len(aa)) + '\n')
  7. print(len(bb))


image.png

时间模块

1. time 模块

在Python中,通常有这几种方式来表示时间:

  • 时间戳(timestamp):
    通常来说,它是自Unix时代以来经过的秒数,即UTC( “世界标准时间”)时间 1970 年1月1日 00:00:00 到目前经过了多少秒。 ```shell import time

print(time.time()) print(type(time.time()))

  1. >>>
  2. ```shell
  3. 1650530674.543568
  4. <class 'float'>

结构化的时间(struct_time):struct_time元组共有9个元素共九个元素:(年,月,日,时,分,秒,当月中第几周,一年中第几天,夏令时)
本地时间的结构化时间

  1. import time
  2. print(time.localtime())

>

  1. time.struct_time(tm_year=2022, tm_mon=4, tm_mday=21, tm_hour=16, tm_min=47, tm_sec=33, tm_wday=3, tm_yday=111, tm_isdst=0)

属性 值 tm_year(年) 比如2011
tm_mon(月) 1 - 12 tm_mday(日) 1 - 31 tm_hour(时) 0 - 23 tm_min(分) 0 - 59 tm_sec(秒) 0 - 61 tm_wday(weekday) 0 - 6(0表示周一) tm_yday(一年中的第几天) 1 - 366 tm_isdst(是否是夏令时) 默认为 0

  • 格式化的时间字符串(Format String) ```python import time

print(time.localtime())

print(time.strftime(“%Y-%m-%d %X”)) print(time.strftime(“%F %T”)) print(time.strftime(“%H:%M:%S”))

  1. >>>
  2. ```python
  3. 2022-04-21 16:53:01
  4. 2022-04-21 16:53:01
  5. 16:53:01

格式化时间的变量:

格式 含义
%a 本地(locale)简化星期名称
%A 本地完整星期名称
%b 本地简化月份名称
%B 本地完整月份名称
%c 本地相应的日期和时间表示
%d 一个月中的第几天(01 - 31)
%H 一天中的第几个小时(24小时制,00 - 23)
%I 第几个小时(12小时制,01 - 12)
%j 一年中的第几天(001 - 366)
%m 月份(01 - 12)
%M 分钟数(00 - 59)
%p 本地am或者pm的相应符
%S 秒(01 - 61)
%U 一年中的星期数。(00 - 53星期天是一个星期的开始。)第一个星期天之前的所有天数都放在第0周。
%w 一个星期中的第几天(0 - 6,0是星期天)
%W 和%U基本相同,不同的是%W以星期一为一个星期的开始。
%x 本地相应日期
%X 本地相应时间
%y 去掉世纪的年份(00 - 99)
%Y 完整的年份
%Z 时区的名字(如果不存在为空字符)
%% ‘%’字符

时间的互相转换

image.png

  1. # 时间戳
  2. import time
  3. print(time.time())

>

  1. 1650598640.0598445

时间戳转换为结构化时间 ```python import time

print(time.localtime(1650598640.0598445))

  1. >>>
  2. ```python
  3. time.struct_time(tm_year=2022, tm_mon=4, tm_mday=22, tm_hour=11, tm_min=37, tm_sec=20, tm_wday=4, tm_yday=112, tm_isdst=0)

结构化时间转换为字符串时间

  1. import time
  2. # 将 结构化时间或者时间戳转换为 格式化后的字符串时间
  3. print(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(1650596666.2671423)))

>

  1. 2022-04-22 11:04:26

将 字符串时间转换为结构化时间

  1. import time
  2. print(time.strptime('2022-04-22 11:04:26', '%Y-%m-%d %H:%M:%S'))

>

  1. time.struct_time(tm_year=2022, tm_mon=4, tm_mday=22, tm_hour=11, tm_min=4, tm_sec=26, tm_wday=4, tm_yday=112, tm_isdst=-1)

将 指定的字符串时间转换为时间戳

  1. print(time.mktime(time.strptime('2022-04-22 11:04:26', '%Y-%m-%d %H:%M:%S')))time.mktime(time.strptime('2022-04-22 11:04:26', '%Y-%m-%d %H:%M:%S'))

>

  1. 1650596666.0

其他方法

当前进程休眠10s

  1. import time
  2. time.sleep(5)
  3. print('hello world')

获取到微秒

  1. import time
  2. # 时间戳
  3. print(time.time())
  4. print(time.localtime(1650598640.0598445))
  5. time.sleep(2)
  6. print('hello world')
  7. print(time.perf_counter()) #获取到微秒

datetime 模块

时间加减

  1. >>> datetime.datetime.now()
  2. datetime.datetime(2022, 4, 22, 16, 57, 34, 470543)
  3. >>> str(datetime.datetime.now())
  4. '2022-04-22 16:57:41.413990'
  5. # 加3天
  6. >>> datetime.datetime.now() + datetime.timedelta(3)
  7. datetime.datetime(2022, 4, 25, 16, 58, 0, 828520)
  8. # 加30分钟
  9. >>> datetime.datetime.now() + datetime.timedelta(minutes=20)
  10. datetime.datetime(2022, 4, 22, 17, 51, 49, 15128)

时间格式转换

  1. >>> datetime.datetime.strftime(datetime.datetime.now(),'%Y-%m %T')
  2. '2022-04 17:33:01'
  3. >>> datetime.date.strftime(datetime.datetime.now(),'%Y-%m %T')
  4. '2022-04 17:33:20'

1.作业:

创建一个文件,文件名为格式为: 自己名字的全拼秒.txt
写入一行内容: 当天的日期,格式为: 今天是:当前年
当前月_当前日
例如:
文件名: shiyufei1107.txt
内容如下:

  1. [root@python-server ~]# cat file.py
  2. #!/usr/bin/python3
  3. from datetime import datetime
  4. f_obj=open(datetime.now().date().strftime('shiyufei-20%y年%m月%d日'+'.txt'), 'w', encoding='utf-8')
  5. f_obj.write('今天是:' + datetime.now().date().strftime('20%Y年%m月%d日'))
  1. [root@python-server ~]# python3 file.py
  2. [root@python-server ~]# ls
  3. shiyufei-20220422日.txt
  4. [root@python-server ~]# cat shiyufei-20220422日.txt
  5. 今天是:2020220422

subprocess 模块执行本机系统命令

os.system() 执行的命令只是把命令的结果输出导终端,程序中无法拿到执行命令的结果。
subprocess 是开启一个系统基本的单个进程,执行 shell 命令,可以得到命令的执行结果。

  1. # 在 shell 中运行命令,并且获取到标准正确输出、标准错误输出
  2. >>> subprocess.getoutput('ls')
  3. 'anaconda-ks.cfg\ndate.py\nfile.py\nPython-3.8.9.tgz\nshiyufei-2022年04月22日.txt'
  4. >>> subprocess.getoutput('ls | grep fi')
  5. 'file.py'
  6. >>> subprocess.getoutput('date')
  7. 'Sun Apr 24 21:28:06 CST 2022'