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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

MtoSlc

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

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

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

打赏作者

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

抵扣说明:

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

余额充值