Python基础教程

1、变量类型

#变量赋值
a = 10 #数据类型:Numbers -->int(整型)
b = 10.10 #数据类型:Numbers -->float(浮点型)
c = 'hello' #数据类型:String -->str (字符型)
d = ['p','y','t','h','o','n'] #数据类型:List(列表)
e = ('a','b','c','d') #数据类型:Tuple(元组)
f = {'name':'zs','age':18} #数据类型:Dict(字典)
g = {'zs','lisi','wangwu'}
print(a,b,c,d,e,f,g)
#输出结果:10 10.1 hello ['p', 'y', 't', 'h', 'o', 'n'] ('a', 'b', 'c', 'd') {'name': 'zs', 'age': 18} {'lisi', 'wangwu', 'zs'}

#多个变量赋值:
a , b , c , d ,e ,g = 10 ,10.10 , 'hello', ['p','y','t','h','o','n'],('a','b','c','d'),{'zs','lisi','wangwu'}
print(a,b,c,d,e,f,g)
#输出结果:10 10.1 hello ['p', 'y', 't', 'h', 'o', 'n'] ('a', 'b', 'c', 'd') {'name': 'zs', 'age': 18} {'lisi', 'wangwu', 'zs'}

#数据类型转换:
a = 10
b = float(a) #将整型a转换为浮点型b
c = str(b) #将整型a转换为字符串c
d = complex(a) #将整型a转换为字复数d
print(a,b,c,d) #输出结果10 10.0 10.0 (10+0j)
e = ['zs','lis','wangwu'] #数据类型:List(列表)
f = tuple(e) #将列表e转换为字元组f
g = dict({'姓名':e}) #创建字典g
print(e,f,g) #输出结果:['zs', 'lis', 'wangwu'] ('zs', 'lis', 'wangwu') {'姓名': ['zs', 'lis', 'wangwu']}

2、运算符

#算术运算符:
a = 10
b = 20
c = a + b #加法+ -->30
d = b - a #减法- -->10
f = a * b #乘法* -->200
g = a / b #除法/ -->0.5
h = a % b #取余% -->10
i = a ** b #a的b次幂 -->100000000000000000000
j = a // b #向下取整  -->0
print(c,d,f,g,h,i,j)
#输出结果:30 10 200 0.5 10 100000000000000000000 0

#比较运算符:
a = 10
b = 20
print(a > b) # >大于 False
print(a < b) # <小于 True
print(a == b) # ==等于 False
print(a != b) # !=不等于 True
print(a >= b) # >大于等于 False
print(a < b) # <小于等于 True

#赋值运算符:
a = 10 #将10赋值给a
b = 20 #将20赋值给b
b += a #等效b = b + a 加法赋值 -->30
b -= a #等效b = b - a 减法赋值 -->10
b *= a #等效b = b * a 乘法赋值 -->200
b /= a #等效b = b / a 除法赋值 -->2
b %= a #等效b = b % a 取模赋值 -->0
b **= a #等效b = b ** a 幂赋值运 -->10240000000000
b //= a #等效b = b // a 取整除赋值 -->2

#位运算符:
a = 10 #10二进制为:01010
b = 20 #20二进制为:10100
c = a & b #&按位与 两个相应位都为1 则为1 否则为0  -->00000
e = a | b #|按位或 对应位有一个为1 则为1  否则为0  -->11110
f = a ^ b #^按位异或 两个相应位值相异 则为1  否则为0  -->11110
g = ~a #~按位取反 把1变为0 0变为1  -->10101
h = a << 2 #<<左移动 把a二进制向左移动2位  -->01000
i = a >> 2 #>>右移动 把a二进制向右移动2位  -->00010

#逻辑运算符:
a = 10
b = 20
if a and b :
    print("a与b两边都为True,返回True,否则返回False")
if a or b :
    print("a或b为True,则返回True,否则返回False")
if not a :
    print("a为True,则返回False,否则返回True")

3、条件语句

score = input("请输入你的成绩:") #input()从控制台输入
score = int(score) #input()返回值类型为str 使用int()转换为整型
if score >= 90 : #成绩大于等于90,则执行A
    print('您的成绩是A')
elif score >= 80 :  #成绩大于等于80,则执行B
    print('您的成绩是B')
elif score >= 60 : #成绩大于等于60,则执行C
    print('您的成绩是C')
else : #不满足以上条件,则执行D
    print('您的成绩是D')

4、循环语句

a = ['apple','orange','banana']
b = {'name':'zs','age':18}
sum = 0
for i in range(1,101): #for循环遍历range(1,101)  range(1,101) 等于[1,2,...,100]列表
    sum +=i
print(sum) #5050
for x in a: # for循环遍历a列表
    print('水果:'+x)
for key,values in b.items(): # for循环遍历b字典
    print('key:'+ key + '\tvalues:' + str(values))
#输出结果:
# 水果:apple
# 水果:orange
# 水果:banana
# key:name	values:zs
# key:age	values:18

x = 1
sum = 0
while x <= 100: #while循环
    if x % 2 == 0: #
        sum += x
        x += 1
    else:
        x += 1
        continue #continue跳出本次循环
    print('此时sum:',sum)
print(sum) #2550

while True: ##while循环条件为True是死循环
    age = int(input('请输入您的年龄:'))
    if age >= 18 :
        print('您已成年,可以玩游戏了!!')
    else:
        print('您还未成年,拒绝未成年玩游戏!!')
        break #break跳出循环体
#输出结果:
# 请输入您的年龄:85
# 您已成年,可以玩游戏了!!
# 请输入您的年龄:2
# 您还未成年,拒绝未成年玩游戏!!

i = 10
while  i % 2 == 0: #i为偶数则执行
    print('i是偶数')
    break
else: #i为奇数则执行
    print('i是奇数')
    i += 1

5、进制转换

a = 10
print(bin(a)) #bin()将数字转换为二进制  -->0b1010
print(oct(a)) #oct()将数字转换为八进制  -->0o12
print(hex(a)) #hex()将数字转换为十六进制 -->0xa

b = 12.5
print(round(b)) #round()返回五舍六入  -->12
#ASCII码
c = 97
print(chr(c)) #返回ASCII值的字符  -->a
print(ord('a')) #返回字符的Unicode码值 -->97
#
#
e = dir(__builtins__) #内置函数
#
f = open('./data/abc.txt', 'a')
print('hero',file=f) #把输出数据写入到文件
f.close()
#
g = 102
print('g = %2d\n%d' %(g,b))
#
h = '   hello world '
print(h.rstrip(),h.lstrip(),h.strip())
print('\n'.join(dir(h)))
print(help(h.strip))
#
for x in 'hello':
    print(x)
py,txt,xlsx = [],[],[]
li = ['a.py','b.txt','c.xlsx']
for x in li:
    if x.endswith('.py'): #endswith以什么结尾
        py.append(x)
    elif x.endswith('.txt'):
        txt.append(x)
    else:
        xlsx.append(x)
print(py,txt,xlsx)

x = [[a,b,c] for a in range(1,10) for b in range(1,10) for c in range(1,10) if a**2 + b**2 == c**2]
print(x)

import random
count = 0
number = random.randint(1,100)
while True:
    num = int(input('请输入您猜的数字,每人5次机会(您还剩%d次机会):' %(5-count)))
    if 5 - count == 0:
        print('很遗憾,挑战失败!!正确的数字是:', number)
        break
    count += 1
    if num == number:
        print('恭喜您答对了!!,游戏结束。')
        break
    elif num > number:
        print('抱歉,您猜大了,请重新猜猜!!')
    else:
        print('抱歉,您猜小了,请重新猜猜!!')

a = [50 + 1.2*(x-1) for x in range(1,11) ]
print(a)

a = ['a', 'b', 'c', 'd','e']
b = ['b', 'c', 'd', 'h','g']
c = ['r', 'g', 'd', 'd','e']
d = zip(a,b,c)
f = list(d)
print(f) #[('a', 'b', 'r'), ('b', 'c', 'g'), ('c', 'd', 'd'), ('d', 'h', 'd'), ('e', 'g', 'e')]
x,y,z = zip(*f)
print(x,y,z)

#阶乘
def jiecheng(n):
    if n == 1:
        return 1
    else:
        return (n * jiecheng(n-1))

value = 4
print(jiecheng(value))

#匿名函数:
sumss = lambda x,y: x + y
sums = sumss(2,3)
print(sums)

number = range(1,100)
jishu = list(filter(lambda x:x % 2 == 1,number))
print(jishu)

num = [2,3,6,8,5]
pingfan = list(map(lambda x: x ** 2,num))
print(pingfan)

import random
min,max = 1,100
winPercent = int(input('请输入你赢的比率(0-100之间):'))
while True:
    print('猜大小游戏:L或l表示大,S或s表示小,Q或q退出游戏')
    customerNum = input('= ')
    if customerNum == 'Q' or customerNum == 'q':
        break
    num = random.randint(min,max)
    if num > winPercent:
        print('恭喜你,猜对了')
    else:
        print('很遗憾,答错了,请再来一次')

import random
num = list(range(1,10))
random.shuffle(num)
print(num)

import os
print(os.getcwd()) #获取当前工作目录
print(os.path.abspath('.')) #获取当前工作目录的绝对路径
print(os.path.abspath('..')) #获取当前工作目录的上一级目录的绝对路径
print(os.path.abspath('studyNote.py')) #获取当前lzz.py文件的路径

# 查找目录下文件
import  glob
sale_order = glob.glob('.\data\好易康_淘宝*.xlsx')
for x in sale_order:
    print(x)

""""
----------------------------------------------------------------正则表达式
import re
a = 'hel8 low5&ohalr3%lhfld23_\n'
b = re.findall('\d',a) #匹配文本中所有数字
c = re.findall('\D',a) #匹配文本中所有非数字字符
d = re.findall('h[ef]l',a) #['hel', 'hfl']
e = re.findall('h[^ef]l',a) #['hal']
f = re.findall('h[e-g]l',a) #['hel', 'hfl']
g = re.findall('\w',a) #['h', 'e', 'l', '8', 'l', 'o', 'w', '5', 'o', 'h', 'a', 'l', 'r', '3', 'l', 'h', 'f', 'l', 'd', '2', '3', '_'] 单个字符 数字 下划线
h = re.findall('\W',a) #[' ', '&', '%', '\n'] 特殊字符 空格 转义符
j = re.findall('\s',a) #空白字符 [' ', '\n']
k = re.findall('\S',a) #['h', 'e', 'l', '8', 'l', 'o', 'w', '5', '&', 'o', 'h', 'a', 'l', 'r', '3', '%', 'l', 'h', 'f', 'l', 'd', '2', '3', '_']
#数量词
import re
a = '233html 44javascript88java00python42'
b = re.findall('[a-z]{3,11}',a) #['html', 'javascript', 'java', 'python'] 贪婪匹配
c = re.findall('[a-z]{3,11}?',a) #['htm', 'jav', 'asc', 'rip', 'jav', 'pyt', 'hon'] 非贪婪匹配
----------------------------------------------------------------
import re
a = 'pytho23python533pythonnn23'
b = re.findall('python*',a) #['pytho', 'python', 'pythonnn'] *零次或无限多次
c = re.findall('python+',a) #['python', 'pythonnn'] +匹配1次或无限多次
d = re.findall('python?',a) #['pytho', 'python', 'python'] ?匹配0次或1次
#边界匹配
import re
a = ['1622789188','162278918','2332','33555333344443']
for i in a:
    b = re.findall('^\d{8,10}$',i)
    print(b)
# ['1622789188']
# ['162278918']
# []
# []
#组
import re
a = 'pythonpythonpython34pytho5pythonnn33pythonpython' #['python', 'python']
b = re.findall('(python){2}',a)
----------------------------------------------------------------
import re
a = 'PythonC#\nJava'
b = re.findall('c#.{1}',a,re.I | re.S )  #re.I 忽略大小写  re.S匹配所有字符 .除了转义符的所有字符  --->['C#\n']
----------------------------------------------------------------sub
import re
a = 'PythonC#JavaPHP'
b = re.sub('C#','Mysql',a,0) #PythonMysqlJavaPHP  0把所有的配到的目标替换  1只替换第一个
----------------------------------------------------------------
import re
def get_patter(patter):
    pass
def get_repl(value):
    getNum = value.group()
    if getNum >= '5':
        return 'a'
    else:
        return 'b'
a = '85030983909'
b = re.sub('\d' , get_repl , a) #PythonMysqlJavaPHP  0把所有的配到的目标替换  1只替换第一个
print(b) #aabbbaababa
-------------------------------------------------
import re
a = '55h44333cc00'
b = re.match('\d',a).span() #(0, 1)
c = re.search('\d',a).group() #5
d = re.findall('\d',a) #['5', '5', '4', '4', '3', '3', '3', '0', '0']
------------------------------------------------
import  re
a = 'hello ,how are you me ,where are you me come from '
b = re.search('are(.*)me(.*)me',a).group(0,1,2) # ('are you me ,where are you me come', ' you me ,where are you ', ' co')
d = re.search('are(.*)me(.*)me',a).groups() #(' you me ,where are you ', ' co')
c = re.findall('are(.*)me(.*)me',a) #[(' you me ,where are you ', ' co')]
------------------------------------------------------------------json -->反序列化
是轻量级数据交换格式
import  json
a = '[{"name":"张三","age":32,"isNan":false},{"name":"李四","age":34}]'
b = json.loads(a) #[{'name': '张三', 'age': 32, 'isNan': False}, {'name': '李四', 'age': 34}]

json             python
object           dict
array            list
string           str
number           int
number           float
true             True
false            False
null             None
-----序列化
import  json
a = [{'name': '张三', 'age': 32, 'isNan': False}, {'name': '李四', 'age': 34}]
b = json.dumps(a) #[{"name": "\u5f20\u4e09", "age": 32, "isNan": false}, {"name": "\u674e\u56db", "age": 34}] #[{'name': '张三', 'age': 32, 'isNan': False}, {'name': '李四', 'age': 34}]
--------------------------------列表
data = []
a = []
a.append(('a','b'))
a.append(('c','d'))
b = []
b.append(('1','2'))

data.extend(a)
data.extend(b)
data = str(data)[1:-1]
print(a)
print(b)
print(data)

#异常
y = 10
x =0
try:
    z = y/x
    print(z)
except Exception:
    raise

some_list = ['a', 'b', 'c', 'b', 'd', 'm', 'n', 'n']
a = set(x for x in some_list if some_list.count(x) >1)
print(a)

#map映射
def add(x):
    return x+x
def cheng(x):
    return x*x
func = [add,cheng]
for i in range(10):
    b = list(map(lambda x:x(i),func)) #映射
    print(b)

from functools import reduce
a = range(-6,6)
b = list(filter(lambda x : x >0 , a)) #过滤
c = reduce((lambda x ,y : x * y) ,b) # 计算并返回结果
print(b)
print((c))

#多参数
def get_params(*args,**kwargs):
    for x in args:
        print(x)

    for key,values in kwargs.items():
        print(key,values)
serial = ['image','name','age']
person = {"arg3": 3, "arg2": "two", "arg1": 5}
get_params(*serial,**person)

def get_sum(n):
    num2 = [i**2 for i in range(n)]
    num3 = [i**3 for i in range(n)]
    # print(type(num2))
    sum = []
    for x in range(n):
        sum.append(num2[x]+num3[x])
    return sum
sum = get_sum(10)
print(sum)
#结果:[0, 2, 12, 36, 80, 150, 252, 392, 576, 810]

----------------------------------------------------------------numpy pandas
import numpy as np
def get_sum(n):
    num2 = np.arange(n)**2
    num3 = np.arange(n)**3
    sum = num2 + num3
    return sum
sum = get_sum(10)
print(sum)
#结果:[  0   2  12  36  80 150 252 392 576 810]

import numpy as np
import pandas as pd
num2 = np.arange(10)**2
num3 = np.arange(10)**3
datas = pd.DataFrame({
    '2次方':num2,
    '3次方':num3
})
print(datas)
datas.plot()

import numpy as np
a = np.array([1,2,3,4],dtype='str')#ndmin指定数组维度
print(a)

a = [1,2,3]
b = a
b[1] = 10
print(id(a),id(b))#1965246664896 1965246664896
print(a)#[1, 10, 3]

import numpy as np
a = np.array([1,2,3])
b = np.array(a)
b[1] = 10
print(id(a),id(b))#2155008646032 2155008646128
print(a)#[1 2 3]

import numpy as np
a = np.array([1,2,3])
b = a.copy()
print(id(a),id(b))#2240927980432 2240927980528

import numpy as np
a = np.arange(10.0)
b = np.arange(10,dtype = 'float')
print(a)

#等差数列
import numpy as np
a = np.linspace(0,10,5) #结束点 endpoint = False  默认为True
print(a)

import numpy as np
a = np.logspace(0,10,5,base=1)
print(a)

a = np.arange(15) #范围
b = a.reshape(3,5) #转化为3行5列
c = b.shape #(3,5)
d = b.ndim #2 维数
e = b.itemsize #元素占用字节
f = b.size #元素个数
print(type(b)) #<class 'numpy.ndarray'>

a = np.array([1,'2','3',4,5,6],ndmin = 2,dtype=int) #实例化ndarray对象 ndmin维度为2 dtype指定数据类型

import pandas as pd
import numpy as np
a = np.random.randint(4,5,6)
p = pd.Panel(a)

import  sys
msg = sys.stdin.readline() #从屏幕输入
print(msg,type(msg))
outmsg =sys.stdout.write(msg) #从屏幕输出

import os
import glob
print(os.getcwd()) #获取当前工作目录
print(os.path.abspath('.')) #获取当前工作目标的绝对目录
if os.path.exists('./temp'):
    print('temp文件夹存在')
    os.rmdir('./temp')
else:
    os.mkdir('./temp')

pys = ['hello.py','world.py','ni.py','hao.py']
for py in pys:
    url = os.path.join('https://www.baidu.com/',py) #url拼接
    print(url)

print(os.listdir('./data')) #列出文件目录文件
print(glob.glob('./data/好易康_*东.xlsx')) #获取目录特定的文件
for dir ,sub_dir, file in os.walk('./data'): #获取目录,子目录,文件
    print(dir+'\n'+ str(sub_dir) + '\n'+ str(file))

a = ['hello','world','very','good']
b = ''.join(a) #数据拼接字符串
print(b)
c = ''
for i in a:
    c += i
print(c)

import shutil
shutil.copy('./data/abc.txt', './data/cba.txt') #文件复制
shutil.copytree('./data', './dataf')#复制文件夹
shutil.move('./data/cba.txt','./')#文件移动到当前目录 移动目录
shutil.move('./cba.txt','./data/bca.txt') #文件重命名 重命名目录
shutil.rmtree('./dataf') #删除目录

import  send2trash
send2trash.send2trash('./data/bca.txt') #安全删除文件或目录

import zipfile
import os ,glob
fileZip = zipfile.ZipFile('./data/out.zip','w') #压缩文件对象
for filename in glob.glob('./data/好易康*.xlsx'): #遍历文件
    fileZip.write(filename,os.path.basename(filename),zipfile.ZIP_DEFLATED) #逐一写入压缩文件中
fileZip.close()

import zipfile
unZip = zipfile.ZipFile('./data/out.zip','r') #压缩文件对象
print(unZip.namelist()) #列表形式列出所有被压缩文件名称
for filename in unZip.infolist(): #列出被压缩文件的基本信息
    print(filename.filename,filename.file_size,filename.compress_size)
unZip.close()

import zipfile
unZip = zipfile.ZipFile('./data/out.zip') #压缩文件对象
unZip.extractall('./data/out')#解压缩
unZip.close()

import pyperclip
pyperclip.copy('hello world') #复制
content = pyperclip.paste() #黏贴
print(content)

def main(x,y): #异常
    try:
        value = x / y
    # except Exception as e:
    except (ZeroDivisionError,TypeError,SyntaxError) as e:
        print("ErrorInfo:",e)
    else:
        return value
a = main(3,4)
b = main(3,0)
c = main(3,'4')
print(a,'\n',b,'\n',c)

str = 'hello world  你好呀'
list = str.split() #多少个单字
print(list)

import traceback
def main(num):
    if len(num) < 4 :
        raise Exception('密码太短') #抛出异常
    elif len(num) >12:
        raise Exception('密码太长')
    else:
        raise Exception('密码合法')

passwd = ['se323sasdd', 'dkdn','deiidkd','hhdhdhhhdsllskdk3']
for pas in passwd:
    try:
        main(pas)
    except Exception as e:
        # print(e)
        with open('./data/note.txt','a') as f:
            f.write(traceback.format_exc()) #追捕异常信息
        print('有异常回溯')
    else:
        print('正确的就执行')
    finally:
        print('不管是否有误,都要执行')

def draw_money(money):
    sum = 1000
    assert sum >= money,'余额不足' #设置断言
    sum = sum - money
    print(sum)
draw_money(1211)

import logging #程序日志
# logging.disable(logging.DEBUG) #禁用程序日志
logging.basicConfig(level = logging.DEBUG, format='%(asctime)s:%(levelname)s:%(message)s') #filename='./data/logging.txt',
logging.debug('程序小细节内容')
logging.info('程序一般发生的事件')
logging.warning('未来可能导致的问题')
logging.error('某些状态引起错误')
logging.critical('整个系统中断的错误')
def factorial(x):
    sum = 1
    for i in range(x+1):
        sum *= i
        logging.debug('i = '+str(i)+',sum = '+ str(sum))
    return sum
num = 5
sum = factorial(num)
print('factorial(%d)=%d' %(num,sum))

import  re #正则表达式
start = 'nih(2323)-83483el3lo2323-2322wo3rl232-3223d'
pattern = r'(\(\d{4}\))-(\d{4})'
# regular = re.compile(r'\d') #MatchObject对象
# end = regular.search(start).group() #找到第一个符合字符就返回,使用group()取值,找不到返回None
# alls = regular.findall(start) #查找符合所有字符,并且以列表形式返回值,没有则返回空字符串
end = re.search(pattern, start,re.I).group() #,re.I忽略大小写 re.DOTALL 搜索换行符 re.VERBOSE 加上批注  |管道加多个参数 例如:re.I | re.DOTALL
ends = re.search(pattern, start,re.I).groups()
alls = re.findall(pattern, start,re.I)
guan = re.findall('wo|ni',start,re.I) #|管道
shou = re.match('nih',start).group() #返回匹配到第一个字
result = re.sub('wo','world',start) #替换字符
print(end,'\n',ends,'\n',alls,'\n',guan,'\n',shou,'\n',result)

#world学习
import docx
doc = docx.Document('./data/do.docx') #创建docx对象
para = doc.paragraphs #段落
para_content = doc.paragraphs[1].text #某一段落文本内容
type = doc.paragraphs[1].runs #某一短多文本样式
type_content = doc.paragraphs[1].runs[4].text #某一短多文本样式内容
doc.save('./data/do_xin.docx') #存储文件
print(len(para))
print(para_content)
print(len(type))
print(type_content)

import docx
from docx.shared import Inches
doc = docx.Document()
title = doc.add_heading('中国共产党万岁!!')
para = doc.add_paragraph('没有中国共产党就没有新中国!!',style='ListNumber')
run = para.add_run('第一个run内容')
run.bold = True #run样式为粗体  italics样式斜体
doc.add_heading('中国人民万岁!!',level=2)
doc.add_paragraph('中国人民是勤劳、淳朴、正直、友善!!',style='ListBullet')
title.insert_paragraph_before('第一段落')
doc.add_page_break()#插入换页
doc.add_heading('这是新一页!!')
doc.add_picture(r'E:\photo\numpy.jpg',width=Inches(5),height=Inches(5)) #插入图片
table = doc.add_table(rows = 5,cols =5) #新增表格 创建表格对象
row = table.rows[0]
row.cells[0].text = '1'
row.cells[1].text = '2'
table.add_row() #新增一行表格
row_len = len(table.rows) #表格行长度
col_len = len(table.columns)#表格列长度
#打印表格
for row in table.rows:
    for cell in row.cells:
        print(cell)
table.style ='LightShading-Accent1'
doc.save('./data/doo.docx')


import PyPDF2
with open('./data/产品作用原理详解(上).pdf', 'rb') as f  :
    pdfOjb = PyPDF2.PdfReader(f) #创建pdf对象
    numPages =pdfOjb.pages #获取PDF文件页数
    isEncrypted = pdfOjb.is_encrypted #返回true表示文件加密  否则不加密
    for page in numPages:
        print(page.extract_text())#输出每页数据内容
    if isEncrypted: #文件加密
        if pdfOjb.decrypt('lin'):
            print('文件解密')
        else:
            print('解密失败')
    else:
        print('文件不加密')

    new_pdf = PyPDF2.PdfWriter() #创建新的PDF对象
    outPdf = new_pdf.addPage(page) #把添加上pdf文件
    with open('./data/newPDF.pdf','wb') as f :
        new_pdf.write(f) #写入newPDF文件

import PyPDF2
content = open('./data/产品作用原理详解(上).pdf','rb')
pdfobj = PyPDF2.PdfReader(content) #创建读pdf对象
page = pdfobj.pages[1].rotate(90) #读取第一页旋转90度
page1 = pdfobj.pages[2].rotate(90) #读取第2页旋转90度
page.merge_page(page1) #添加水印
newfile = open('./data/news.pdf','wb')
newpdf = PyPDF2.PdfWriter() #创建写pdf对象
newpdf.add_page(page) #添加页到对象中
newpdf.encrypt('lin') #加密
newpdf.write(newfile) #把对象写入pdf
content.close() #关闭pdf文件对象
newfile.close()

#破解密码
pw = 'LIN'
statcode = True
for x in range(1,27):
    if statcode:
        for y in range(1,27):
            if statcode:
                for z in range(1,27):
                    code = chr(x+64) + chr(y+64) + chr(z+64) #unicode码A是65
                    if code == pw:
                        print('密码破解成功,密码为:'+ code)
                        statcode = False
                        break
                    else:
                        print(code,end = ' ')



#excel
import openpyxl
xlsx = openpyxl.load_workbook('./data/好易康_京东.xlsx') #获取excel文件对象
allsheets = xlsx.sheetnames #获取worksheet工作表对象
activesheet = xlsx.active #获取当前工作表对象
content = xlsx['Sheet1'] #获取Sheet1工作表
myworkbook = xlsx.create_sheet('ceshi')
for row in range(1,content.max_row+1):
    for column in range(1,content.max_column+1):
        print(content.cell(column = column,row = row).value,end=' ')
    print('\n', end='')
print('----------------------------------------------------------------')
for cells in list(content.rows): #content.rows content.columns 生成器 是元组类型
    for cell in cells:
        print(cell.value, end=' ')
    print('\n', end='')
print('-----------------------切片--------------------------------------')
for row in content['A2':'D4']:
    for cell in row:
        print(cell.value, end=' ')
    print('\n', end='')
print(allsheets)
print(activesheet)
print(myworkbook.title)
print(content['A1'].value)
print(content['A1'].column, content['A1'].row,content['A1'].coordinate) #coordinate相对位置
print(content.max_row,content.max_column) #获取工作表几行几列

import openpyxl
lists = [['学号','姓名','课程'],['1001','zs','java']]
wb = openpyxl.Workbook()
wt = wb.active
print(wt.title)
wt.title = 'Python'
wt['A1'] = '名称' #写入单元格
for list in lists:
    wt.append(list) #列表写入单元格
wb.create_sheet(index=2,title='python1') #新增sheet工作表
# wb.remove_sheet('python1') #删除sheet工作表
print(wt.title)
wb.save('./data/python.xlsx')
wb1 = openpyxl.load_workbook('./data/python.xlsx')
wb1.save('./data/python1.xlsx') #复制excel文件

import openpyxl
from  openpyxl.styles import Font
wb = openpyxl.Workbook()
wt = wb.active
fontSytle = Font(name = '微软正黑体',size = 32 ,bold=True,italic=True,color= '0000ff') #excel单元格样式
wt['A1'] = 'HELLO'
lists = [['学号','姓名','课程'],['1001','zs','java']]
for list in lists:
    wt.append(list) #列表写入单元格
wt['A1'].font = fontSytle
wb.save('./data/python1.xlsx')

import openpyxl
wb = openpyxl.load_workbook('./data/python1.xlsx')
wt = wb.active
name_scrop = [['张三', 87],['李四',78],['王五',90],['总分','=sum(B4,B6)'],['平均值','=average(B4,B6)'],['最大值','=max(B4,B6)']] #数学公式
for scrop in name_scrop:
    wt.append(scrop)
wb.save('./data/python1.xlsx')

import openpyxl
from  openpyxl.styles import Alignment
wb = openpyxl.load_workbook('./data/python1.xlsx')
wt = wb.active
wt.row_dimensions[3].height = 40 #设置单元格高度
wt.column_dimensions['C'].width = 20 #设置单元格宽度
wt['A5'].alignment = Alignment(horizontal='center', vertical='center') #居中对齐
wt.merge_cells('A1:C1') #合并单元格
wt.unmerge_cells('A1:C1') #取消合并单元格
wb.save('./data/python1.xlsx')

#柱形图
import  openpyxl
from openpyxl.chart import BarChart ,Reference #BarChart 柱形图  BarChart3D 3D柱形图  代码实现与柱形图一样
wb = openpyxl.load_workbook('./data/python3.xlsx')
# wb = openpyxl.Workbook()
wt = wb.active
# rows = [['','2022年','2023年'],
#         ['a','2253','5888']
#         ,['b','5543','7788']
#         ,['c','4545','3466']]
# for row in rows:
#     wt.append(row)

barChart = BarChart() #直方图
barChart.title =  '销售额情况分析' #标题名称
barChart.y_axis.title = '销售金额' #y轴标题
barChart.x_axis.title = '年份' #x轴标题

data = Reference(wt,min_col=2,max_col=3,min_row=1,max_row=4) #图表数据
barChart.add_data(data,titles_from_data=True) #建立图表
xtitle = Reference(wt,min_col=1,min_row=2,max_row=4) # x轴标标记称数据
barChart.set_categories(xtitle) #设置x轴标记名称
wt.add_chart(barChart,'E1') #放置图表位置
wb.save('./data/python3.xlsx')

import  openpyxl
from openpyxl.chart import PieChart ,Reference #PieChart 饼图  PieChart3D 3D饼图 代码实现与柱形图一样

wb = openpyxl.Workbook()
wt = wb.active
rows = [['地区','2022年','2023年'],
        ['广州','2253','5888']
        ,['上海','5543','7788']
        ,['北京','4545','3466']]
for row in rows:
    wt.append(row)

barChart = PieChart() #饼图
barChart.title =  '销售额情况分析' #标题名称


data = Reference(wt,min_col=3,min_row=1,max_row=4) #图表数据
barChart.add_data(data,titles_from_data=True) #建立图表
xtitle = Reference(wt,min_col=1,min_row=2,max_row=4) # x轴标标记称数据
barChart.set_categories(xtitle) #设置x轴标记名称
wt.add_chart(barChart,'E1') #放置图表位置
wb.save('./data/python4.xlsx')

#csv文件
import csv
lists = [['a', 'b', 'c'],['张三', '男', 54],['王柳', '女', 45]]
dicts = [{'姓名':'张三','年龄':34,'课程':'java'},{'姓名':'李四','年龄':32,'课程':'Python'},{'姓名':'王五','年龄':43,'课程':'php'}]
with open('./data/ceshi.csv','w',newline='',encoding='gbk') as  csvfile:
    wt = csv.writer(csvfile,delimiter = '\t') #创建writer对象 delimiter分隔符
    fields = ['姓名','年龄','课程']
    dict_wt = csv.DictWriter(csvfile,fieldnames = fields,delimiter = '\t' ) #创建dictwriter对象 fieldnames 字段
    dict_wt.writeheader() #写入标题
    for row in lists:
        wt.writerow(row)
    for dict_row in dicts:
        dict_wt.writerow(dict_row)

with open('./data/ceshi.csv') as readfile :
    rt = csv.reader(readfile) #创建reader对象
    list_rt = list(rt)
    for row in list_rt:
        print(row)

# import webbrowser
# webbrowser.open('https://www.baidu.com/') #打开浏览器搜索
import os
filedir = './data/images/'
filename = './sfsfd/images/sdf.jpg'
filepath = os.path.join(os.path.dirname(filedir), os.path.basename(filename)) #目录拼接
print(filepath)

import datetime
dt = datetime.datetime.now() #获取当前时间
td = datetime.datetime(2020,12,12,12,12,12) #设置特定时间
deltaTime = datetime.timedelta(days=2,hours=1, minutes=2,seconds=10)  #设置一段时间
print(dt)
print(td)
print(deltaTime.seconds) #时分秒的总秒数
print(deltaTime.total_seconds()) #统计总秒数

#绘制图表
import matplotlib.pyplot as plt
# plt.rcParams['font.sans-serif']=['SimHei'] #显示中文标签
# plt.rcParams['axes.unicode_minus']=False   #这两行需要手动设置
# data1 = [2,4,5,6,7,8,12,23,28]
# data2 = [3,5,7,9,11,12,14,26,29]
# data3 = [4,6,5,6,5,8,16,21,16]
# data4 = [5,5,6,9,11,18,14,23,43]
# x = [1,2,3,4,5,6,7,8,9]
# xx = [11,12,13,14,15,16,17,18,19]
# plt.xticks(xx) #自定义x轴刻度值
# data20, = plt.plot(xx,data3,'y-*',label = '2020',linewidth=3)
# data21, = plt.plot(xx,data2,'r-.',label = '2021',linewidth=3)
# data22, = plt.plot(xx,data1,'g--',label = '2022',linewidth=3)
# data23, = plt.plot(xx,data4,'k:',label = '2023',linewidth=3) #绘制图表 linewidth设置线条的宽度
# plt.legend(handles = [data20,data21,data22,data23],loc = 2) #legend设置图例 upper left 左上角=2 'lower right'=4
# # plt.axis([1,9,0,50]) #axis设置x,y轴的最小最大刻度
# plt.title("2023年销售额分析情况",fontsize = 20) #title设置标题 fontsize设置字体大小
# plt.xlabel("月份",fontsize = 10) #xlabel设置x轴标题
# plt.ylabel("销售额",fontsize = 10) #ylabel设置y轴标题
# plt.tick_params(axis = 'both',labelsize = 10,color = 'red') #tick_params设置轴的刻度值显示的大小及颜色
# plt.savefig('./data/picture/a.jpg',bbox_inches ='tight') #savefig保存图表  bbox_inches='tight'表示图表外多余的空间删除
# plt.show() #展示

#绘制散点图
# x = list(range(1,101))
# y = [x ** 2 for x in x]
# plt.axis([0,100,0,10000])
# plt.scatter(x,y,color='y') #绘制散点图
# plt.show()
import numpy as np
# lists = np.linspace(0,10,200)
# x = np.sin(lists)
# y = np.cos(lists)
# xx = np.sin([x+1 for x in lists])
# yy = np.cos([x+1 for x in lists])
# plt.scatter(lists,x,color='r')
# plt.scatter(lists,y,color='y')
# plt.scatter(lists,xx,color='g')
# plt.scatter(lists,yy,color='c')
# plt.show()

# x = np.arange(500)
# y = x
# colors = x
# lists = np.linspace(0,20,500)
# xx = np.sin(lists)
# yy = np.cos(lists)
# plt.scatter(lists,xx,c=colors,cmap='rainbow') #c 代替color (c=y轴,cmap='hsv' 随y轴值变化)(c=x轴,cmap='hsv' 随x轴值变化)
# plt.scatter(lists,yy,c=colors,cmap='rainbow')
# plt.savefig('./data/picture/b.jpg',bbox_inches='tight')
# plt.show()

# num = 100
# x = np.random.random(num)
# y = np.random.random(num)
# t = x
# plt.figure(1) #建立图表1
# plt.scatter(x,y,s = 66,c=t ,cmap= 'brg') #s散点大小
# # plt.axes().get_xaxis().set_visible(True) #设置x轴不可见
# # plt.axes().get_yaxis().set_visible(True) #设置y轴不可见
# plt.savefig('./data/picture/c.jpg',bbox_inches='tight')
# plt.show()

#绘制直方图
# x = ['a', 'b', 'c']
# y = [34,56,89]
# width = 0.35
# plt.bar(x,y,width,color = 'y') #width宽度值
# plt.title('the world is good')
# plt.xlabel('name')
# plt.ylabel('value')
# plt.xticks(x,('aa','bb','cc')) #重新设置x轴值
# plt.yticks(y,[44,55,66])  #重新设置y轴值
# #fig = plt.figure(dpi = 8,figsize=(12,8)) #设置绘图区大小 fig.autofmt_xdate(rotation=60) #x轴日期值旋转60度  plt.fill_between(dates,high,low,color='black',alpha=0.2) alpha透明度
# plt.savefig('./data/picture/d.jpg',bbox_inches='tight')
# plt.show()

# from datetime import datetime
# dates = datetime.strptime('2013-09-30 12:56:12','%Y-%m-%d %H:%M:%S')
# print(dates)
#
#json学习
import json
lists = ['a', 'b', 'd', 'd', 'c', 'f']
tuples = ('a', 'b', 'c', 'd', 'e', 'f')
dicts = {'name':'lisi','age':18}
sets = {'name','age','sex'}
lists = json.dumps(lists,indent=4,sort_keys=True)#json.dumps序列化  把数据转化为字符串 sort_keys排序
tuples = json.dumps(tuples,indent=4)
dicts = json.dumps(dicts,indent=4) #indent内缩4个字节

print(lists,'\n',tuples,'\n',dicts,'\n')
print('*'*60)
lists = json.loads(lists)
tuples = json.loads(tuples)
dicts = json.loads(dicts)
print(lists,type(lists),'\n',tuples,type(tuples),'\n',dicts,type(dicts))

with open('./data/json.json','w') as f:
    json.dump(dicts,f,indent=4) #将Python数据类型转换为json文件

with open('./data/json.json','r') as f:
    data = json.load(f,indent=4) #将json文件转换为Python数据类型
print(data)

#sqlite数据库
# import sqlite3
# conn = sqlite3.connect('./data/myDatabase.db') #连接数据库
# cur = conn.cursor()
# #创建数据表
# # sql = """
# #     create table demo(
# #         id int,
# #         name text,
# #         gender text
# #     )
# # """
# # tuples = (2,'李四','女')
# # sql = "insert into demo values (%d,'%s','%s')" % tuples #插入数据
# # sql = "insert into demo values (?,?,?)" #插入数据
# # cur.execute(sql,tuples) #执行sql语句
# sql = 'update demo set name = "王五" where gender = "女"' #修改数据
# cur.execute(sql)
# conn.commit()
# sql = "select *from  demo" #查询数据
# results = cur.execute(sql)
# for row in results:  #results.fetchall() 讲结果转换为元组
#     print(row)
# sql = 'delete from demo where id = 2' #删除数据
# cur.execute(sql)
# conn.commit()
# cur.close()
# conn.close()

import pyautogui
import random
import time
# width,height =pyautogui.size() #获取屏幕像素
# print(width,height)
# xloc,yloc = pyautogui.position() #获取鼠标光标位置
# print(xloc,yloc)
# x = 66
# y = 770
# for i in range(1,10):
#     num = random.random()*20 + 6
#     pyautogui.moveTo(x*num,y,duration = 3) #moveTo()将鼠标移动到设置好的绝对光标位置  moveRel()将鼠标移动到设置好的相对光标位置 前一次光标位置的相对位置
# strs = 'hello world'
# print(strs.rjust(20)) #rjust(20)固定位置输出
# print('how are you'.rjust(20))
#
# pyautogui.click(600,600,button='right') #单击右键
# pyautogui.mouseDown(button= 'right') #当前鼠标位置按住鼠标右键
# time.sleep(2)
# pyautogui.mouseUp(800,800,button= 'right') #放开鼠标后光标移动在(800,800)

# time.sleep(10)
# pyautogui.click()
# num = 10
# while num <300:
#     pyautogui.dragRel(num,0,duration=2) #拖拽鼠标
#     pyautogui.dragRel(0,num)
#     pyautogui.dragRel(-num,0)
#     pyautogui.dragRel(0,-num)
#     num += 10
#
# for x  in range(1,10):
#     pyautogui.scroll(300) #向上滚动300
#     time.sleep(2)
#     pyautogui.scroll(-300) #向下滚动300![](data/picture/screen.jpg)
#     time.sleep(2)

# screenShot = pyautogui.screenshot('./data/picture/screen.jpg') #截图
# screenShot = pyautogui.screenshot()
# crop = screenShot.crop((600,480,900,680)) #裁剪图
# print(screenShot.getpixel((700,600))) #获取(700,600)位置的像素色彩
# crop.save('./data/picture/crop.jpg')

#python控制键盘
# time.sleep(6) #按8键
# pyautogui.typewrite('hello world',0.1)
# pyautogui.typewrite(['enter','h','o','l','del'])
# pyautogui.keyDown('shift')  #keyUp按压
# pyautogui.press('8')
# pyautogui.keyUp('shift') #keyUp松开
# pyautogui.hotkey('shift','5') #组合键

#threading线程学习
# import threading
# import datetime
# import time
#
# dt = datetime.datetime.now() #获取当前时间
# print('年:',dt.year,'\n','月',dt.month,'\n','天',dt.day,'\n','时',dt.hour,'\n','分',dt.minute,'\n','秒',dt.second)
# td = datetime.datetime(2020,12,12,12,12,12) #设置特定时间
# deltaTime = datetime.timedelta(days=2,hours=1, minutes=2,seconds=10)  #设置一段时间
# print(dt)
# print(td)
# print(deltaTime.seconds) #时分秒的总秒数
# print(deltaTime.total_seconds()) #统计总秒数
# print(dt+deltaTime)#当前时间+一段时间
# print(dt.strftime('%Y-%m-%d %H:%M:%S')) #当前时间转化为字符串
#
# def threadWork_deamon(snum,enum):
#     print(threading.current_thread().name,'线程开始..') #当前线程名称
#     for i in range(snum,enum):
#         print(i,'\t')
#     time.sleep(3)
#     print(threading.current_thread().name,'线程执行结束..')
#
# def non_deamon():
#     print(threading.current_thread().name,'线程开始..')
#     print(threading.current_thread().name, '线程执行结束..')
#
# def work():
#     print(threading.current_thread().name, '线程开始..')
#     time.sleep(3)
#     print(threading.current_thread().name, '线程执行结束..')
#
# class MyThread(threading.Thread): #是threading.Thread子类别
#     def __init__(self):
#         threading.Thread.__init__(self) #建立线程
#     def run(self): #定义线程工作
#         print(threading.Thread.name)
#
#
# threading1 = threading.Thread(target=threadWork_deamon,args=[1,3],name='线程1') #建立线程对象 args传多个参数 name命名线程名称
# threading1.daemon=False #False主程序等待守护线程执行结束后再结束  True若其他非守护线程执行结束后主线程结束,不等待守护线程是否执行结束
# threading2 = threading.Thread(target=non_deamon,name='线程2')
# threading3 = threading.Thread(target=work,name='线程3')
#
# threading1.start() #启动线程
# threading2.start()
# threading3.start()
# print('start join')
# print('threding线程是否仍在工作:',threading3.is_alive()) #检查threading3线程是否还在工作
# threading3.join(3) #堵塞主线程 等待threading33秒工作完成才往下执行
# print('threding线程是否仍在工作:',threading3.is_alive())
# print('end join')
# print('threding线程是否仍在工作:',threading3.is_alive())
# print('*'*60)
# print('目前共有%d线程在工作:',threading.active_count())
# for thread in threading.enumerate():
#     print('线程名称:',thread.name)
#
# a = MyThread() #创建线程a对象
# a.run() #启动线程a
# a.run()
# b = MyThread()
# b.start() #启动线程b

#海龟绘画
import random
import time
# import turtle
# t = turtle.Pen() #创建海龟绘图对象
# t.speed(3) #速度
# t.forward(100) #向前
# t.left(90) #逆时针90
# t.forward(100)
# t.left(90)
# t.forward(100)
# t.left(90)
# t.forward(100)
# t.left(90)

# for x in range(1, 6):
#     t.forward(100)
#     t.left(144)

# for x in range(1,100):
#     t.forward(200)
#     t.left(95)

# for x in range(1,500):
#     t.forward(x)
#     t.right(91)

# for x in range(1,37):
#     t.forward(100)
#     t.left(90)
#     t.forward(100)
#     t.left(90)
#     t.forward(100)
#     t.left(90)
#     t.forward(100)
#     t.left(100)

# colorList =['red','orange','yellow','green','blue','cyan','purple','violet']
# twidth = 1
# for x in range(1,100):
#     t.color(colorList[x % 8])
#     t.forward(2 + x * 5)
#     t.right(45)
#     twidth += x * 0.05
#     t.width(twidth)

# colorList = 'orange'
# t.width(3)
# for x in range(0,360,15):
#     # color = random.choice(colorList)
#     t.color(colorList)
#     t.setheading(x) #调整海龟方向
#     t.circle(180)
# time.sleep(3)

# t.shape('turtle')
# for x in range(0,361,15):
#     color = random.choice(colorList)
#     t.color(color)
#     t.forward(160)
#     t.stamp()
#     t.home()
#     t.seth(x)#调整海龟方向
# time.sleep(3)

#动画
from tkinter import Tk,Canvas
import math
# def buttonClick():
#     print('hello world')
# tk = Tk() #创建tkinter对象
# btn = Button(tk,text="点击",command=buttonClick) #fun定义按钮工作
# btn.pack() #按钮打包
# mainloop() #让程序持续执行,直到程序被关闭

# tk = Tk() #
# canvas = Canvas(tk,width=640,height=480)
# canvas.pack()
# x,y,r = 320,240,100
# xs ,ys = [],[]
# for x in range(12):
#     xs.append(x + r * math.cos(30 * x * math.pi/180))
#     ys.append(y + r * math.sin(30 * x * math.pi/180))
# for i in range(12):
#     for j in range(12):
#         canvas.create_line(xs[i],ys[i],xs[j],ys[j])
#         # print(xs[i],ys[i],xs[j],ys[j])

#音乐播放
import  pygame
# pygame.mixer.init() #最初化
# soundObj = pygame.mixer.Sound('./data/a.wav') #创建sound对象
# soundObj.play() #播放一次 -1循环播放
# pygame.time.delay(3000) #延迟3秒
# soundObj.play(2) #播放3次
# soundObj.set_volume(0.1) #音量0~1

# pygame.mixer.init() #
# pygame.time.delay(1000) #
# pygame.mixer.music.load('./data/b.mp3') #wav文件  ogg文件
# pygame.mixer.music.play()#播放
# if pygame.mixer.music.get_busy(): #判断音乐是否在播放
#     pygame.mixer.music.pause() #暂停
#     pygame.time.delay(1000)  #
#     pygame.mixer.music.unpause() #恢复暂停

# import cv2
# cv2.namedWindow('hello')
# cv2.namedWindow('world',cv2.WINDOW_NORMAL) #可以设置图片大小
# a = cv2.imread('./data/picture/a.jpg')
# b = cv2.imread('./data/picture/b.jpg')
# cv2.imshow('a',a)
# cv2.imshow('b',b)

中兴光猫运维工具包,2025.8更新,自用版本,已内置教程和操作实例、注意事项等参考文档。仅针对中兴光猫(以及找中兴代工的光猫)使用,和其他厂商并不通用。汇集了处理最新固件版本的光猫运维(以开启Telnet为目录的)相关工具,同时保留了用于处理老版本光猫的历史版本,供参考使用。如何开启Telnet的整体方法,以及更多操作(如救砖和其他开启Telnet方式案例)、更多详情和注意事项等,均参见:<https://blog.csdn.net/zhiyuan411/article/details/128728958>工具包主要内容与模块1 开启Telnet工具该模块提供多种实用工具 用于开启光猫的Telnet服务 这是进行后续高级操作的基础 工具包针对不同版本的光猫和设备平台进行了细致分类1.1 新版工具如zteONU_custom_0.0.7 提供Windows Linux amd64 arm64 386 及MacOS Intel arm 多平台版本 适用范围广 并附有使用说明和Mac地址更改指导1.2 TelnetONU1.5包含Python脚本和Windows预编译版本 支持通过特定漏洞开启工厂模式 适用于新款天翼4.0等光猫 内置详细教程和测试用例1.3 历史版本工具如TelnetONU1.4 保留用于兼容旧型号光猫 确保工具包的全面性2 配置文件处理工具该模块是工具包的核心 用于对光猫的配置文件 通常为.cfg或.xml格式 进行解密 编辑和重新加密2.1 zxcfg工具v1.2及历史版本 支持Windows 32位 64位 Linux Ubuntu 20.04 x64 及ARM架构设备 提供命令行和批处理脚本 如拖入xml进行打包 解包 可自定义光猫32位密钥进行操作2.2 ZTE_Patrina可视化工具提供图形界面 ZTE_Patri
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MtoSlc

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值