- 直接导入模块
- from 模块名 import 函数名
- math模块
- os模块
- 删除失败
- shutil模块
- print(shutil.copyfileobj(src, dst))
- print(shutil.copyfileobj(open(src, ‘r’, encoding=’utf-8’), open(dst, ‘w’, encoding=’utf-8’)))
- print(shutil.copyfileobj(src, dst))
- print(shutil.copyfileobj(open(src, ‘r’, encoding=’utf-8’), open(dst, ‘w’, encoding=’utf-8’)))
- shutil.copyfile(src, dst)
- 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)
- sys模块
- 时间模块
- 1. time 模块
- print(time.localtime())
- 将 字符串时间转换为结构化时间
- 将 指定的字符串时间转换为时间戳
- datetime 模块
- subprocess 模块执行本机系统命令
模块:在python的一个py文件,就可以理解为模块
不是所有的py文件都能作为模块进行导入
如果想让一个py文件能够被导入,模块名字必须要遵循命名规则。
直接导入模块
import time
from 模块名 import 函数名
from random import randint
num1 = randint(0, 10)
print(num1)
from math import *
import datetime as dt
math模块
from math import * #导入这个模块中所有变量和方法
os模块
os模块全称 OperationSystem操作系统
os模块里提供的方法就是用来调用操作系统里的方法
import os
# os.name --> 获取操作系统的名字 windows系统/nt 非windows/posfix
print(os.name)
# 路径的分隔符
print(os.sep)
# 获取文件的绝对路径
print(os.path.abspath('file.txt'))
# isdir判断是否是文件夹
print(os.path.isfile('a.txt'))
# 判断是否存在
print(os.path.exists('a.txt'))
>
nt
\
E:\Pycharm\pythonProject\b.txt
False
True
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)
print(os.getcwd())
path = r'E:\Pycharm'
os.chdir(path)
print(os.getcwd())
>
E:\Pycharm\pythonProject
E:\Pycharm
os.mkdir(path)
path = r'E:\Pycharm\pythonProject\dir1'
os.mkdir(path)
# print(os.chdir(path))
print(os.getcwd())
>
E:\Pycharm\pythonProject\dir1
os.makedirs(path)
path = r'E:\Pycharm\pythonProject\dir1\dir2\dir3'
os.makedirs(path)
os.chdir(path)
print(os.getcwd())
>
E:\Pycharm\pythonProject\dir1\dir2\dir3
os.mkdir(path)和os.makedirs(path)一般的使用:
path = r'E:\Pycharm\pythonProject\dir1\dir2\dir3'
if not os.path.exists(path):
os.makedirs(path)
else:
print("目录已存在")
>
目录已存在
os.rmdir(path)
path = r'E:\Pycharm\pythonProject\dir1\dir2\dir3'
os.rmdir(path)
os.chdir(path)
>
E:\python3.8.8\python.exe E:/Pycharm/pythonProject/file.py
Traceback (most recent call last):
File "E:/Pycharm/pythonProject/file.py", line 12, in <module>
os.chdir(path)
FileNotFoundError: [WinError 2] 系统找不到指定的文件。: 'E:\\Pycharm\\pythonProject\\dir1\\dir2\\dir3'
os.removedirs(path)
path = r'E:\Pycharm\pythonProject\dir1\dir2\test.txt'
os.removedirs(path)
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’
删除失败
<a name="xTWA4"></a>
#### os.listdir(path)
![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)
```python
path = r'E:\Pycharm\pythonProject'
a= os.listdir(path)
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表示目标地址
- 返回值:复制之后的路径
import shutil
src = r'E:\Pycharm\pythonProject\a.txt'
dst = 'E:\Pycharm'
print(shutil.copy(src, dst))
>
E:\Pycharm\a.txt
copy2()
- 功能:复制文件,保留元数据
- 格式:shutil.copy2(src,dst)
- 参数:src表示来源文件,dst表示目标地址
-
copyfileobj()
功能:将一个文件的内容拷贝的另外一个文件当中
- 格式:格式: shutil. copyflleobj(open(src,‘r’),open( dst,‘w’) )
- 参数:src表示来源文件,dst表示目标文件
- 返回值:无
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
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 />**注意:无论文件夹是否为空,均可以复制,而且会复制文件夹中的所有内容**
![copytree](/uploads/projects/Python-newbie-guide/202206/16f784ef4103636b.png "copytree")
```python
import shutil
src = r'E:\Pycharm\pythonProject\dir1'
dst = r'E:\Pycharm\pythonProject\dir2'
shutil.copytree(src, dst)
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)
![shutil](/uploads/projects/Python-newbie-guide/202206/16f785054ce457d5.png "shutil")
<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)
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)
sys模块
sys.version
获取Python解释程序的版本信息
import sys
print(sys.version)
sys.platform
返回操作系统平台名称
import sys
print(sys.platform)
sys.stdin.readline()与input
import sys
# sys.stdin.readline() 相当于input,区别在于input不会读入'\n'
str1 = sys.stdin.readline()
str2 = input('请输入:')
print(len(str1))
print(len(str2))
还有一个区别在于,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))
时间模块
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 | 时区的名字(如果不存在为空字符) |
%% | ‘%’字符 |
时间的互相转换
# 时间戳
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'