Python基础知识入门PartII

本文档整理自李宁老师发布在B站的视频,主要介绍python相关的基础入门知识,相关代码和本文档(md格式)提取码:pyth

Part I 1-11章

12-18章

12 常用模块

12.1 常用模块:sys

import sys
# 将模块所在的路径添加到sys.path列表中
sys.path.append('./test')
print(sys.path)
import my
my.greet('Bill')

print(sys.modules['my'])
print(type(sys.modules['my']))

print(sys.platform)

# 命令行参数
# 使用cmd切换到当前文件的路径,输入:python demo12.1.py abc,'abc'就是传入的命令行参数
# 或者在Pycharm中调出下方的Terminal,输入python demo12.1.py abc
# 输出当前脚本文件的完整路径
print(sys.argv[0])
if len(sys.argv) == 2:
    print(sys.argv[1])
    my.greet(sys.argv[1])
print('------------------------')

# 标准的输入输出流
s = sys.stdin.read(6)  # 只读取输入的前6个字符
print(s)  # 输出读取的字符
sys.stdout.writelines('hello world')
sys.stderr.writelines('error')  # 用红色标记错误输出,而且该行输出的位置是不确定的,可以多运行几次程序观察结果

# 当本脚本被调用时,会输出123,可以运行invoke.py查看运行结果
sys.exit(123)
# 下面是从pycharm控制台运行demo12.1.py的结果
PS D:\Projects\Python\test\demo12_Modules> python demo12.1.py abc
['D:\\Projects\\Python\\test\\demo12_Modules','test']  # 该列表还包含其他路径,这里不作展示,新添加的路径在列表的末尾,即'test'
hello Bill
<module 'my' from 'D:\\Projects\\Python\\test\\demo12_Modules\\./test\\my.py'>
<class 'module'>
win32
demo12.1.py
abc
hello abc
------------------------
请输入一段长度大于6的字符串: asigyhas
asigyh
hello worlderror

invoke.py文件中的代码

import subprocess
output = subprocess.getstatusoutput('python demo12.1.py Harry')
import pprint
pp = pprint.PrettyPrinter(indent=1)
pp.pprint(output)
# 先输出123,再输出demo12.1.py的调用结果
print(output[0])

12.2 获取和改变工作目录

import os
print(f"当前工作目录:{
     os.getcwd()}")
# 获取当前工作目录中的文件名和目录名
print(os.listdir(os.getcwd()))
os.chdir('../')
print(f"改变后的工作目录:{
     os.getcwd()}")
print(os.listdir(os.getcwd()))
当前工作目录:D:\Projects\Java\py2Md\target
['bill', 'classes', 'generated-sources', 'lib', 'maven-archiver', 'maven-status', 'Py2Md-1.0-SNAPSHOT.jar', 'Py2Md.exe', 'yourdir']
改变后的工作目录:D:\Projects\Java\py2Md
['.git', '.gitignore', '.idea', 'pom.xml', 'README.md', 'src', 'target']

12.3 文件与目录操作

'''
1、mkdir(dirname, permissions)
    r w x
    如果dirname存在,会抛出OSError
2、makedirs(dirname, permissions, exist_ok)
    (1)创建多级目录 mkdir('a') mkdir('a/b')(如果上级目录a不存在,下级目录b也不会创建)
        makedirs('a/b/c') 可以连续创建这三个目录
    (2) exist_ok == False,如果目录存在,会抛出OSError
        exist_ok == True,如果目录存在,不会进行任何操作
3、rmdir(dirname):删除目录
    rmdir('a') 如果目录a不为空,会抛出OSError
4、removedirs(dirname):删除目录,可以指定多级目录
    removedirs('a/b/c') 如果几层目录均为空,会全部删除
5、remove(filename)删除filename指定的文件
6、rename(src, dst) 将src参数指定的文件改名为dst指定的文件名
7、renames(src, dst)
    a/b/c --> x/y/z  可以同时修改多层目录的名称
'''
# 建议跟着视频一步一步运行该文件
import os
if not os.path.exists('newdir1'):
    os.mkdir('newdir1')
os.makedirs('x/y/z', 0o733, True)
try:
    os.rmdir('newdir1')
except OSError as e:
    print(e)
# os.removedirs('x/y/z')

if not os.path.exists('mydir'):
    os.mkdir('mydir')
    os.rename('mydir', 'yourdir')
if os.path.exists('x/y/z'):
    os.renames('x/y/z', 'bill/mike/john')
if os.path.exists('newdir1/a.txt'):
    os.remove('newdir1/a.txt')

12.4 软链接与硬链接

'''
软链接(符号链接):相当于Windows的快捷方式
硬链接:是文件的副本
'''
import os
# windows系统要实现软链接需要开启特权SeCreateSymbolicLinkPrivilege
# if os.path.exists('data.txt') and not os.path.exists('slink_data.txt'):
#     # 建立软链接文件
#     os.symlink('data.txt', 'slink_data.txt')
if os.path.exists('data.txt') and not os.path.exists('link_data.txt'):
    # 建立硬链接文件
    os.link('data.txt', 'link_data.txt')

12.5 用于获取和设置系统信息的函数和变量

'''
1、sep变量:返回当前OS的路径分隔符
2、pathsep变量:返回环境变量中的路径之间的分隔符
3、name变量:返回当前OS的名称
4、environ变量:以字典的形式返回系统中所有环境变量的值
5、getenv函数:获取指定的环境变量的值,通过参数可以指定环境变量名
6、putenv函数:设置指定环境变量的值,通过参数指定环境变量名和环境变量值
7、system函数:执行命令,通过参数指定要执行的命令
'''
import os
import subprocess
print('路径分隔符', os.sep)
print('环境变量路径之间的分隔符', os.pathsep)
print('操作系统名', os.name)
print(os.environ)
print('PATH=', os.environ['PATH'])
print('PATH=', os.getenv('PATH'))
路径分隔符 \
环境变量路径之间的分隔符 ;

12.6 集合

'''
集合满足:
1、无序性:集合中各个元素的值是平等的
2、互异性:集合中任意两个元素都是不同的,每个元素只能出现一次
3、确定性:集合中每个元素都是确定的,对于某个值来说,要么属于该集合,要么不属于该集合。
列表、字典都不能作为集合的元素值,因为它们都是可变的
'''
set1 = set(range(10))
print(set1)

set2 = set('helloabc')  # 自动去除重复字符
print(set2)

set3 = set(['Bill', 'John', 'Mike', 'John'])
print(set3)
print('--------------------------')
# 求a和b的并集
a = set((1, 2, 3))
b = set([3, 5, 1, 6])
print(a.union(b))
print(a | b)
# 求a和b的交集
print(a.intersection(b))
print(a & b)

c = set([2, 3])
print(c.issubset(a))
print(a.issubset(c))
print(a.issuperset(c))

d = set([1, 2, 3])
print(a == d)

# 计算集合的差
print(a.difference(b))
print(a - b)

# 计算集合的对称差:只在其中一个集合出现的元素组成的集合
print(a.symmetric_difference(b))
print(a ^ b)
print((a - b) | (b - a))

x = a.copy()
y = a
print(y is a)
print(x is a)

print(1 in a)
{
   0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
{
   'h', 'c', 'a', 'l', 'o', 'b', 'e'}
{
   'Mike', 'John', 'Bill'}
--------------------------
{
   1, 2, 3, 5, 6}
{
   1, 2, 3, 5, 6}
{
   1, 3}
{
   1, 3}
True
False
True
True
{
   2}
{
   2}
{
   2, 5, 6}
{
   2, 5, 6}
{
   2, 5, 6}
True
False
True

12.7 将集合作为集合的元素

'''
集合的元素和字典中的key都不允许是可变的对象,如集合、列表和字典
元组既可以做集合的元素,也可以做字典的key
'''
aSet = set([1, 2])
bSet = set([10, 20])
aSet.add(4)
print(aSet)
# a.add(b)  # 直接将集合作为元素添加到另一个集合,会报错
aSet.add(frozenset(bSet))  # frozenset()只读取集合
print(aSet)

dict = {
   'Bill': 30, 'Mike': 34}
# d[a] = 10  # 不能直接将集合作为key输入字典中
dict[frozenset(aSet)] = 10
print(dict)

# bSet.add(dict)  # 集合不能添加可变对象,如字典

t = (1,2,3,4)
bSet.add(t)
print(bSet)
{
   1, 2, 4}
{
   1, 2, 4, frozenset({
   10, 20})}
{
   'Bill': 30, 'Mike': 34, frozenset({
   1, 2, 4, frozenset({
   10, 20})}): 10}
{
   (1, 2, 3, 4), 10, 20}

12.8 堆Heap

from heapq import *
from random import *

data = [1, 2, 3, 4, 5, 6, 7, 8, 9]
heap = []
for n in data:
    value = choice(data)  # 从data中随机选取一个元素
    # 将值添加到堆
    heappush(heap, value)
print(heap)
heappush(heap, 30)
print(heap)
print(heappop(heap))  # 弹出最小值

data1 = [6,3,1,12,9]
heapify(data1)
print(data1)
print(heapreplace(data1, 123))  # 弹出最小值,并替换为123
print(data1)

print(nlargest(2, data1))  # 返回data1中的最大的n个值
print(nsmallest(3,data1))

print(list(merge([1,3,456,7],[0,1,-5,6],[1,7,4],[],[67])))

print(list(merge(['dog','horse'],['cat','fish','kangaroo'],key=len)))
[1, 2, 2, 4, 5, 5, 5, 9, 6]
[1, 2, 2, 4, 5, 5, 5, 9, 6, 30]
1
[1, 3, 6, 12, 9]
1
[3, 9, 6, 12, 123]
[123, 12]
[3, 6, 9]
[0, 1, 1, -5, 1, 3, 6, 7, 4, 67, 456, 7]
['dog', 'cat', 'fish', 'horse', 'kangaroo']

12.9 双端队列

from collections import deque
q = deque(range(10))
print(q)
# 在两端添加元素
q.append(123)
q.append(-32)
print(q)
q.appendleft(30)
print(q)
# 在两端弹出元素
print(q.pop())
print(q)
print(q.popleft())
print(q)
# 将q向左循环移动2个位置
q.rotate(-2)
print(q)
q.rotate(4)
print(q)

q1 = deque(['a','b'])
q.extend(q1)
print(q)
q.extendleft(q1)
print(q)
deque([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
deque([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 123, -32])
deque([30, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 123, -32])
-32
deque([30, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 123])
30
deque([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 123])
deque([2, 3, 4, 5, 6, 7, 8, 9, 123, 0, 1])
deque([9, 123, 0, 1, 2, 3, 4, 5, 6, 7, 8])
deque([9, 123, 0, 1, 2, 3, 4, 5, 6, 7, 8, 'a', 'b'])
deque(['b', 'a', 9, 123, 0, 1, 2, 3, 4, 5, 6, 7, 8, 'a', 'b'])

12.10 时间元组

import time
localtime = time.localtime(time.time())
print(f"当前时间是:{
     localtime}")
print(type(localtime))  # localtime是一个对象
st = time.struct_time((1,2,3,4,5,6,7,8,9))  # 参数需要是含有9个元素的元组
print(st)

print(f"年 = {
     localtime.tm_year}")
print(f"月 = {
     localtime.tm_mon}")
print(f"日 = {
     localtime.tm_mday}")
print(f"一年的第{
     localtime[7]}天")

localtime = time.asctime(localtime)
print(localtime)
当前时间是:time.struct_time(tm_year=2021, tm_mon=11, tm_mday=10, tm_hour=21, tm_min=27, tm_sec=52, tm_wday=2, tm_yday=314, tm_isdst=0)
<class 'time.struct_time'>
time.struct_time(tm_year=1, tm_mon=2, tm_mday=3, tm_hour=4, tm_min=5, tm_sec=6, tm_wday=7, tm_yday=8, tm_isdst=9)= 2021= 11= 10
一年的第314天
Wed Nov 10 21:27:52 2021

12.11 格式化日期和时间

'''
strftime: 参数1:格式化字符串  参数2:时间元祖
'''
import time
import locale
locale.setlocale(locale.LC_ALL, 'zh_CN.UTF-8')

print(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()))
print(time.strftime('%Y年%m月%d日 %H时%M分%S秒', time.localtime()))

# 输出星期的完整名称
print(time.strftime("今天是%A",time.localtime()))
2021-11-10 21:27:52
20211110212752秒
今天是星期三

12.12 时间戳的增量

import time
time1 = time.time()
time2 = time1 + 60
print(time2)
time3 = time1 + 60*60
time3 = time.localtime(time3)
print(time3)
print(time.strftime('%Y-%m-%d %H:%M:%S', time3))
1636550932.8739896
time.struct_time(tm_year=2021, tm_mon=11, tm_mday=10, tm_hour=22, tm_min=27, tm_sec=52, tm_wday=2, tm_yday=314, tm_isdst=0)
2021-11-10 22:27:52

12.13 计算日期和时间的差

import datetime
d1 = datetime.datetime(2017,4,12)
d2 = datetime.datetime(2018,12,25)
print((d2-d1).days)

d1 = datetime.datetime(2017,4,12,10,10,10)
d2 = datetime.datetime(2018,12,25,10,10,40)
print(d2-d1)
print((d2-d1).seconds)

d1 = datetime.datetime.now()
d2 = d1 + datetime.timedelta(hours = 10)
print(d2)
d2 = d1 + datetime.timedelta(hours = -10)
print(d2)
622
622 days, 0:00:30
30
2021-11-11 07:27:52.988998
2021-11-10 11:27:52.988998

12.14 获取某月和某年的日历

import calendar
import locale
cal = calendar.month(2021,1)
print(cal)

print(calendar.calendar(2021))
    January 2021
Mo Tu We Th Fr Sa Su
             1  2  3
 4  5  6  7  8  9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

                                  2021

      January                   February                   March
Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su
             1  2  3       1  2  3  4  5  6  7       1  2  3  4  5  6  7
 4  5  6  7  8  9 10       8  9 10 11 12 13 14       8  9 10 11 12 13 14
11 12 13 14 15 16 17      15 16 17 18 19 20 21      15 16 17 18 19 20 21
18 19 20 21 22 23 24      22 23 24 25 26 27 28      22 23 24 25 26 27 28
25 26 27 28 29 30 31                                29 30 31

       April                      May                       June
Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su
          1  2  3  4                      1  2          1  2  3  4  5  6
 5  6  7  8  9 10 11       3  4  5  6  7  8  9       7  8  9 10 11 12 13
12 13 14 15 16 17 18      10 11 12 13 14 15 16      14 15 16 17 18 19 20
19 20 21 22 23 24 25      17 18 19 20 21 22 23      21 22 23 24 25 26 27
26 27 28 29 30            24 25 26 27 28 29 30      28 29 30
                          31

        July                     August                  September
Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su
          1  2  3  4                         1             1  2  3  4  5
 5  6  7  8  9 10 11       2  3  4  5  6  7  8       6  7  8  9 10 11 12
12 13 14 15 16 17 18       9 10 11 12 13 14 15      13 14 15 16 17 18 19
19 20 21 22 23 24 25      16 17 18 19 20 21 22      20 21 22 23 24 25 26
26 27 28 29 30 31         23 24 25 26 27 28 29      27 28 29 30
                          30 31

      October                   November                  December
Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su
             1  2  3       1  2  3  4  5  6  7             1  2  3  4  5
 4  5  6  7  8  9 10       8  9 10 11 12 13 14       6  7  8  9 10 11 12
11 12 13 14 15 16 17      15 16 17 18 19 20 21      13 14 15 16 17 18 19
18 19 20 21 22 23 24      22 23 24 25 26 27 28      20 21 22 23 24 25 26
25 26 27 28 29 30 31      29 30                     27 28 29 30 31

12.15 随机数

'''
randint(m,n):用于产生m到n之间的随机整数,包括m和n
random():用于产生0到1之间的随机浮点数,包括0,但不包括1
uniform(m,n):用于产生m到n之间的随机浮点数,m和n可以是浮点数,包括m和n
randrange(m,n,step):在一个递增的序列中随机选择一个整数。其中step是步长
    如randrange(1,6,2)会在列表[1,3,5]中随机选择一个整数
choice(seq):从seq序列中随机选择一个元素值。seq指定的列表元素可以是任意类型的值
sample(seq,k):从seq中随机选出k个元素,然后生成一个新的序列
shuffle(seq):把seq序列中的元素顺序打乱,该函数直接修改原有的序列
'''
import random
print(random.randint(1,100))
print(random.random())
print(random.randrange(1,20,3))  # 从[1,4,7,10,13,16,19]中选取
print(random.uniform(1,100.05))

intList = [1,2,5,7,39,40]
print(random.choice(intList))

newList = random.sample(intList, 3)
print(newList)

random.shuffle(intList)
print(intList)
58
0.44714554718797783
10
81.96900990017868
5
[40, 39, 2]
[40, 7, 39, 1, 2, 5]

12.16 数学函数

import math
print('圆周率 =',math.pi)
print('自然常数 =', math.e)

print(math.fabs(-1.2))
# 向上取整
print(math.ceil(1.3))
# 向下取整
print(math.floor(1.8))

print(math.pow(2, 10))

print(math.sqrt(8))

print(math.sin(math.pi/2))
print(math.cos(math.pi))
print(math.tan
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值