模块:在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)

>

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

os.path.dirname(path)

  • 去掉文件名,返回目录

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

    >

    E:\Pycharm\pythonProject
    

    os.path.exists(path)

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

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

    os.path.jion()

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

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

    >

    abc\dir2\dir3
    

    os.walk()

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

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

    >

    E:\python3.8.8\python.exe E:/Pycharm/pythonProject/file.py
    E:\Pycharm\pythonProject\a.txt
    E:\Pycharm\pythonProject\b.txt
    E:\Pycharm\pythonProject\file.py
    E:\Pycharm\pythonProject\main.py
    E:\Pycharm\pythonProject\.idea
    E:\Pycharm\pythonProject\dir1
    E:\Pycharm\pythonProject\.idea\.gitignore
    E:\Pycharm\pythonProject\.idea\misc.xml
    E:\Pycharm\pythonProject\.idea\modules.xml
    E:\Pycharm\pythonProject\.idea\pythonProject.iml
    E:\Pycharm\pythonProject\.idea\workspace.xml
    E:\Pycharm\pythonProject\.idea\inspectionProfiles
    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

import shutil

src = r'E:\Pycharm\pythonProject\a.txt'
dst = 'E:\Pycharm'
print(shutil.copy(src, dst))

>

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

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

>

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)

<a name="dy5Gz"></a>
##### copyfileobj()和copyfile()的区别
> copyfileobj()得使用open打开文件,而copyfile()则不用
> copyfileobj()更加灵活,可以在目标文件追加内容
> copyfile()则更加方便,但是如果目标文件有内容,则会被覆盖


<a name="d72PE"></a>
#### copytree()

- 功能:复制整个文件目录
- 格式:格式: shutil. copytree(src, dst) )
- 参数:src表示来源目录,dst表示目标目录
- 返回值:目标目录的路径<br />**注意:无论文件夹是否为空,均可以复制,而且会复制文件夹中的所有内容**

![image.png](https://cdn.nlark.com/yuque/0/2022/png/23214851/1650166556923-b341e374-3a4d-4b43-b7b8-eb69f2760b62.png#clientId=udea22a5f-231b-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=217&id=u4a9d78af&margin=%5Bobject%20Object%5D&name=image.png&originHeight=271&originWidth=840&originalType=binary&ratio=1&rotation=0&showTitle=false&size=28732&status=done&style=none&taskId=uec742813-0957-41eb-a561-9695f87136c&title=&width=672)
```python
import shutil

src = r'E:\Pycharm\pythonProject\dir1'
dst = r'E:\Pycharm\pythonProject\dir2'
shutil.copytree(src, dst)


image.png
image.png

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)

![image.png](https://cdn.nlark.com/yuque/0/2022/png/23214851/1650166669972-b7829620-f51d-40db-8513-5f1cfde46a01.png#clientId=udea22a5f-231b-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=213&id=u8b88f036&margin=%5Bobject%20Object%5D&name=image.png&originHeight=266&originWidth=855&originalType=binary&ratio=1&rotation=0&showTitle=false&size=28570&status=done&style=none&taskId=ufe303629-62a2-436c-ba83-c95d9f0b9e2&title=&width=684)

<a name="dW821"></a>
#### move()

- 功能:移动文件或者文件夹
- 格式: shutil. move(src, dst) )
- 参数: src表示来源地址,dst表示目标地址
- 返回值:目标地址
```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)

image.png

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

>>>
```python
C:\Windows\system32\cmd.EXE

make_archive压缩

# 将 /home/shark 目录下的所以文件打包压缩到当前目录下,
# 名字 shark,格式 gztar。扩展名会自动根据格式自动生成。
[root@python-server ~]# cat date.py 
import shutil
shutil.make_archive('feige',         # 压缩后文件名
                    'gztar',        # 指定的压缩格式
                    '/home/feige')    # 被压缩的文件夹名字

# 将 /home/shark 目录下的所以文件打包压缩到 /tmp 目录下,名字shark,格式 tar
shutil.make_archive( '/tmp/feige','tar','/home/shark/')

# 查看当前 python 环境下支持的压缩格式
ret = shutil.get_archive_formats()
print(ret)


image.png

sys模块

sys.version

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

import sys
print(sys.version)


image.png

sys.platform

返回操作系统平台名称

import sys
print(sys.platform)


image.png

sys.stdin.readline()与input

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


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

sys.stdout与print

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

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

import sys
# sys.stdout.write('hello' + '\n')
# print('hello')

aa = sys.stdin.readline()
bb = input('请输入: ')

sys.stdout.write(str(len(aa)) + '\n')
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()))

>>>
```shell
1650530674.543568
<class 'float'>

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

import time

print(time.localtime())

>

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

>>>
```python
2022-04-21 16:53:01
2022-04-21 16:53:01
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

# 时间戳
import time

print(time.time())

>

1650598640.0598445

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

print(time.localtime(1650598640.0598445))

>>>
```python
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)

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

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

>

2022-04-22 11:04:26

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

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

>

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)

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

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

>

1650596666.0

其他方法

当前进程休眠10s

import time
time.sleep(5)
print('hello world')

获取到微秒

import time
# 时间戳
print(time.time())
print(time.localtime(1650598640.0598445))
time.sleep(2)
print('hello world')
print(time.perf_counter()) #获取到微秒

datetime 模块

时间加减

>>> datetime.datetime.now()
datetime.datetime(2022, 4, 22, 16, 57, 34, 470543)

>>> str(datetime.datetime.now())
'2022-04-22 16:57:41.413990'

# 加3天
>>> datetime.datetime.now() + datetime.timedelta(3)
datetime.datetime(2022, 4, 25, 16, 58, 0, 828520)

# 加30分钟
>>> datetime.datetime.now() + datetime.timedelta(minutes=20)
datetime.datetime(2022, 4, 22, 17, 51, 49, 15128)

时间格式转换

>>> datetime.datetime.strftime(datetime.datetime.now(),'%Y-%m %T')
'2022-04 17:33:01'

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

1.作业:

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

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

subprocess 模块执行本机系统命令

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

# 在 shell 中运行命令,并且获取到标准正确输出、标准错误输出
>>> subprocess.getoutput('ls')
'anaconda-ks.cfg\ndate.py\nfile.py\nPython-3.8.9.tgz\nshiyufei-2022年04月22日.txt'
>>> subprocess.getoutput('ls | grep fi')
'file.py'

>>> subprocess.getoutput('date')
'Sun Apr 24 21:28:06 CST 2022'