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)