Python


Python

linux安装python3.10.16

wget [https://www.python.org/ftp/python/3.10.16/Python-3.10.16.tgz](https://www.python.org/ftp/python/3.10.x/Python-3.10.0.tgz)

tar -xvf Python-3.10.16.tgz -C /usr/local/

cd /usr/local/Python-3.10.16

./configure --prefix=/usr/local/python3.10

make

sudo make install

函数

***if***

name=input()
if name=="zhangsan":
    print('good')
else:
    print('xxx')
***elif*

name='lisi'
age=12
if name=='zhangsan':
    print('hello')
elif age==12:
    print('good')**

while

age=13
count=1
while age<=19:
    print("xx"+str(count))
    age=age+1
    count=count+1
    

while True:
    print('qingshuru ')
    name=input()
    if name == 'zhangsan':
        break
print("good")     

while True:
    a=input("请输入")
    if a!='zs':
        continue
    print('ok')
    password=input('请输入密码')
    if password=='1':
        break
print('login')
      

for

for i in range(0, 10,2):------------->从0开始到8,间隔为2
    print(i)
for i in range(10 ,-1 ,-1):
    print(i) 

print()函数

print('hello',end='')
print('world')
helloworld

global语句

**global a  声明一个全局变量,不能用这个名字创建局部变量**

异常处理

try:
    1/0
except ZeroDivisionError:
    print('zero division error')

MySQL

import pymysql

try:
    conn = pymysql.connect(host='localhost', port=3306, user='root', password='1234', database='booksdb', charset='utf8mb4')
    cursor = conn.cursor()

    # 执行 SQL 查询
    sql = "SELECT * FROM userinfo"  # 替换为你的表名
    cursor.execute(sql)

    # 获取查询结果
    results = cursor.fetchall()
    for row in results:
        print(row)

except pymysql.Error as e:
    print(f"数据库操作失败:{e}")

finally:
    if 'conn' in locals() and conn.open:
        conn.close()

列表

spam=[['zhangsan'],['a','b','c']]
print(spam[1][1])

spam[1][-1]--------->表示倒数第一个元素

 
**列表切片
spam[1,3]------------>从第一个开始到第四个,不包括第四个

列表删除值
del spam[1]

innot in**

***快速赋值***
spam=['1','2','3']
a,b,c=spam 

***enumerate()------------>列表中表项本身以及索引***
spam=['1','2','3']
for  i, item in enumerate(spam):
    print(item)

**random.shuffle() 
random.shuffle(spam)
就地将修改列表,重新排序

方法:index() remove() append() sort()排序spam.sort(key=str.lower) reverse()反转列表值
sort和reverse都不返回列表
spam.index('xxx')--------->返回索引**

  
spam=['1','2','3']
print(spam.index('3'))
spam.append('good')
print(spam)
spam.insert(1,'sss')
print(spam)
spam.remove('sss')
print(spam)

2
['1', '2', '3', 'good']
['1', 'sss', '2', '3', 'good']
['1', '2', '3', 'good']
    
    
    
list=['6','-2','3','1']
list.sort()
print(list)
spam=['a','b','A','d']
spam.sort(key=str.lower)
print(spam)
spam.reverse()

字符串(不可变数据类型)

name1=name[0:5]+'the'+name[6:10]

元组数据类型(像字符串一样是不可变的)

**list和tuple()
print(list('hello'))
['h', 'e', 'l', 'l', 'o']**

引用

spam=42 —————→创建一个42,把地址给spam

aaa=spam——————→将指向42的地址给aaa

spam=100————————>将100的地址给spam,不影响aaa的值

但是列表是可变的

spam=[’1’,’2’,’3’]

bbb=spam

bbb[1]=’aaa’——-→spam————→[’1’,’aaa’,’3’]

COPY


import copy
spam=['a','b','c']
chess=copy.copy(spam)
chess[1]=11
print(chess)
print(spam)

列表中包含列表,用deepcopy()
['a', 11, 'c']
['a', 'b', 'c']

字典k-v(不排序)

cat={'key':'v'}
print(cat['key'])
v

cat={'key':'v','a':1,'b':12}
for key in cat.values():
    print(key)

for item in cat.items():
    print(item)
for key in cat.keys():   
    print(key)
    
cat={'key':'v','a':1,'b':12}
print(cat.get('s',"xxx"))----------->没有s就用xxx代替

cat={'key':'v','a':1,'b':12}
cat.setdefault("aaa",1234)------------>没有就设置值
print(cat)    

字符串

转义字符

\’—————>单引号

\”—————>双引号

\t—————>制表符

\n—————>换行

\—————>反斜杠

print(r'this is"" a \1str')—→加上r,使它变为原始字符串 print(f'test is {a},sss is {b}')---→加上f变为插值

str='\'HeLLo world'
print(str.upper())----------->返回新字符串变为大写
print(str.lower())----------->返回新字符串,变为小写
'HELLO WORLD
'hello world
返回的为新字符串,没有改变原来字符串

print(str.isalnum())-------------->是否只包含数字和字母,且非空
print(str.isalpha())--------------->是否只包含字母,且非空
print(str.isspace())--------------->只包含空格,制表符和换行符,且非空
print(str.istitle())------------->驼峰( This Is Title)

str.startswith('hello')
str.endswith('world')
spam=['1','2','3']
a='+'.join(spam)---------------------->拼接字符串列表
print(a)--------------------->1+2+3
b=a.split('+')----------------->分割字符串
print(b)------------------->['1', '2', '3']

s='hello world sssss'
b=s.partition('world')----------------->分隔符
print(b)---------------------->('hello ', 'world', ' sssss')

s='hello world sssss'
b=s.rjust(50,'1')
c=s.ljust(100,'=')
s.center(20)
print(b)------------------->111111111111111111111111111111111hello world sssss
print(c)------------------->hello world sssss================

s.strip() ---->返回一个新字符串开头和末尾都没有空白字符(lstrip() 和rstrip())
s.strip('AMP')--------------->删除两端出现的AMP                   
print(ord('A'))----------------->65
print(chr(66))------------------>B
import pyperclip
pyperclip.copy("helooo")
b=pyperclip.paste()
print(b)

正则表达式

\d: 0~9的数字

\d{3} 0~9三次

\D 除了0~9以外任何字符

\w 字母数字下划线

\W 除字母数字下划线

\s 空格 制表符 换行符

字符集[a-zA-Z0-9]匹配所有的大小写字母和数字

$ 表示以这个结束

^ 表示以这个开始

. 匹配除了换行符之外的所有字符

.* 匹配所有的 reg=re.compile(r’.*’,re.DOTALL)=⇒匹配所有的,包括换行符

    reg = re.compile(r'(\d{4})-(\d{4})')
    match = reg.search('my phone is 1234-5678')
    print(match.group())------------->1234-5678
	  match.group(1)------------------>1234 
    match.group(2)-------------->5678
    match.groups()------>('1234', '5678')-------------->获取所有分组
    
    
    
    reg=re.compile(r'good|job')----------------->匹配good或job
m=reg.search('this is a good job.')
m.group()-------------------------------->返回匹配的第一个
reg1=re.compile(r'Bat(man|bat)')---------------------->匹配Bat开头的

**? 表示可选**
reg=re.compile(r'(\d{3})?\d{4}')------------>表示(\d{3})可有可无

***表示零次或者多次**
reg=re.compile(r'(wo)*')------------>匹配wowowo  wo 

**+表示一次或者多次
reg=re.compile(r'(wo)+')------------>至少一次wo

{}表示多次 (ha){3,5}-------------------->匹配hahaha hahahahaha

贪心**
reg=re.compile(r'(ha){3,5}?')--------------->最后加上?表示非贪心,返回hahaha
print(reg.search('hahahahaha').group())

**findall
reg=re.compile(r'\d\d\d')
print(reg.findall('this is123and 456 and 789'))------------>['123', '456', '789']**

文件读写

file=open("D:\\py-project\\fastApiProject\\test.txt",'a')------------->添加
file.write('wo')
file.close()

file=open("D:\\py-project\\fastApiProject\\test.txt",'w')----------->覆盖
file.write('wo11')
file.close()

利用shelve保存

import shelve
shelvefile=shelve.open('mydata')
cat=['zhangsan','lisi','wangwu']
shelvefile['cat']=cat
shelvefile.close()

利用pprint 的pformat

import pprint
cat=[{"name":"zhangsan",'age':22},{"name":"l;isi",'age':22}]
pprint.pformat(cat)
f=open('pprint.py','w')
f.write('cat'+pprint.pformat(cat)+'\n')
f.close()

将下载的文件保存到硬盘

import requests
response=requests.get('url')
response.raise_for_status()
file=open('test.txt','wb')
for chunk in response.iter_content(10000):
    file.write(chunk)     

使用bs4解析Html

soup.select(’div’)———————>查询所有div的元素

soup.select(’div span’)———————>查询div元素之内的span的元素

soup.select(’input[name]’)———————>查询名为,并且有一个name属性

import requests,bs4
res=requests.get('https://yyp123.xyz/')
res.raise_for_status()
soup=bs4.BeautifulSoup(res.text,'lxml')
print(soup.select('div img'))

处理excel

import openpyxl
wb=openpyxl.load_workbook('./test.xlsx')
print(wb.sheetnames)
sheet1=wb['Sheet1']
print(sheet1.cell(row=2, column=1).value)

from openpyxl.utils import get_column_letter,column_index_from_string
字母---->数字openpyxl.utils.column_index_from_string
数字---->字母openpyxl.utils.get_column_letter

获取行和列

import openpyxl
from openpyxl.utils import get_column_letter,column_index_from_string
wb=openpyxl.load_workbook('./test.xlsx')
print(wb.sheetnames)
ws=wb['Sheet1']
for e in ws['A1':'C3']:
    for iner in e:
        print("this is coordinate"+iner.coordinate,"this is value"+iner.value)
    print('end ')
import openpyxl
from openpyxl.utils import get_column_letter,column_index_from_string
wb=openpyxl.load_workbook('./test.xlsx')
print(wb.sheetnames)
ws=wb['Sheet1']
print(list(ws.columns)[0])
----------------->(<Cell 'Sheet1'.A1>, <Cell 'Sheet1'.A2>, <Cell 'Sheet1'.A3>)

创建excel

import openpyxl
wb=openpyxl.Workbook()
sheet=wb.active
sheet.title='this is a title'
wb.save('test1.xlsx')

import openpyxl
wb=openpyxl.load_workbook('test1.xlsx')
wb.create_sheet('this is new sheet')----------------->创建新工作表
print(wb.sheetnames)

del wb['this is new sheet']-------------->删除工作表

***公式***
import openpyxl
wb=openpyxl.load_workbook('./test.xlsx')
sheet=wb['Sheet1']
sheet['A1']='=sum(A2:A3)'
wb.save('test.xlsx')

**行高**
sheet.row_dimensions[1].height=100
sheet.column_dimensions['B'].width=100

**冻结窗口**
sheet.freeze_panes=None ------------>'A1'

PDF

import PyPDF2
pdf=open('test.pdf', 'rb')
PdfReader = PyPDF2.PdfFileReader(pdf)
print(PdfReader.numPages)
print(PdfReader.getPage(51).extractText())
pdf.close()