Python

来自OSSmedia

ubuntu将默认使用python2更改为默认使用python3的方法

直接执行这两个命令即可:

sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 100 
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 150

操作剪贴板

import pyperclip 
pyperclip.copy("写入剪贴板的内容") 
url =pyperclip.paste() 
linux error------- 
Traceback (most recent call last): 
File "/home/diao/python/qrcode.py", line 7, in <module> 
   url =pyperclip.paste() 
 File "/usr/local/lib/python3.7/dist-packages/pyperclip/__init__.py", line 640, in lazy_load_stub_paste 
   return paste() 
 File "/usr/local/lib/python3.7/dist-packages/pyperclip/__init__.py", line 303, in __call__ 
   raise PyperclipException(EXCEPT_MSG) 
pyperclip.PyperclipException:  
   Pyperclip could not find a copy/paste mechanism for your system. 
   For more information

解决方法

sudo apt-get install xsel to install the xsel utility. 
sudo apt-get install xclip to install the xclip utility. 
pip install gtk to install the gtk Python module. 
pip install PyQt4 to install the PyQt4 Python module.

解析网页图片

import urllib.request 
import urllib.parse 
from bs4 import BeautifulSoup 
import ssl 
import os 
import pyperclip 
import webbrowser as web 
  1. 从剪贴板获取网页地址
url =pyperclip.paste()  
  1. 关闭证书验证
ssl._create_default_https_context = ssl._create_unverified_context 
response1 = urllib.request.urlopen(url) 
str = response1.read() 
soup = BeautifulSoup(str,"html5lib") 
  1. 解析链接处理相对路径和绝对路径
url_d = urllib.parse.urlparse(url) 
print(url_d) 
  1. 结果写入html文件
ff = open("pic.html","w") 

ff.write("<html><body>

") for img in soup.find_all("img"): ff.write("") ff.write("")
 else : 
ff.write("<img src='"+url_d.scheme+"://"+url_d.netloc+"/"+img["src"]+"'>") ff.write("") ff.write("") ff.write("
")
 if url_d.scheme == None: 
ff.write("<img src='"+img["src"]+"'>
"+img["src"]+""+url_d.scheme+"://"+url_d.netloc+"/"+img["src"]+"

</body></html>")

 ff.close() 
 pp = os.path.abspath('.')+ "/pic.html" 
  1. 系统默认程序打开html文件
 web.open_new('file://'+pp)

使用界面窗口

import tkinter 
 
def loadpic(): 
   print("myWindow.quit") 
 
w = tkinter.Tk() 
  1. 设置标题
w.title('Python windows') 
  1. 设置窗口大小
#w.geometry('580x800') 
width = 580 
height = 400 
screenwidth = w.winfo_screenwidth() 
screenheight = w.winfo_screenheight() 
alignstr = '%dx%d+%d+%d' % (width, height, (screenwidth-width)/2, (screenheight-height)/2) 
#alignstr = (width, height, (screenwidth-width)/2, (screenheight-height)/2) 
w.geometry(alignstr) 
 
  1. 设置窗口是否可变长、宽,True:可变,False:不可变
w.resizable(width=True, height=True) 
tkinter.Button(w, text='Run', command=loadpic).grid(row=0) 
  1. 创建一个标签,显示文本
tkinter.Label(w, text="user-name",bg='red',font=('Arial 12 bold'),width=20,height=5).grid(row=1) 
 
logo = tkinter.PhotoImage(file="/Users/diaozhiqiang/python/1.png") 
tkinter.Label(w, image=logo).pack(side='left').grid(row=2) 
  
 
def showinfo(): 
  # 获取输入的内容 
    print(entry.get()) 
    text.insert(tkinter.INSERT, entry.get()) 
entry = tkinter.Entry(win) 
entry.pack() 
button = tkinter.Button(win, text="按钮", command=showinfo) 
button.pack() 
text = tkinter.Text(win, width=30, height=10) 
text.pack() 
 
w.mainloop()  
 

详细介绍 [1]

将输出写入文件

import tkinter 
import sys 
 
tmp = sys.stdout 
fp = open("tkinter_help.txt","w")  
sys.stdout = fp # redirect stdout 
help(tkinter) 
sys.stdout = tmp # recover stdout 
fp.close()

生成二维码

#sudo apt install python3-pip 
#pip install myqr 
#sudo apt-get install xclip 
 
from MyQR import myqr 
myqr.run( 
   words='http://www.smypservice.cn' 
   #picture='bg1.jpg', 
   #colorized=True 
   ) 
  1. 显示二维码
  1. windows
import webbrowser 
webbrowser.open('qrcode.png') 
 
  1. linux
import matplotlib.pyplot 
lena = matplotlib.pyplot.imread('qrcode.png') 
matplotlib.pyplot.imshow(lena) 
matplotlib.pyplot.axis('off') 
matplotlib.pyplot.show()
words=text, #在命令后输入链接或者句子作为参数,然后在程序的当前目录中产生相应的二维码图片文件,默认命名为” qrcode.png“
version=1,  #设置容错率为最高默认边长是取决于你输入的信息的长度和使用的纠错等级;而默认纠错等级是最高级的H
level='H',  #控制纠错水平,范围是L、M、Q、H,从左到右依次升高
picture="images/logo.jpg",  #用来将QR二维码图像与一张同目录下的图片相结合,产生一张黑白图片
colorized=True, #可以使产生的图片由黑白(False)变为彩色(True)的
contrast=1.0, #用以调节图片的对比度,1.0 表示原始图片,更小的值表示更低对比度,更大反之。默认为1.0。
brightness=1.0, #用来调节图片的亮度,其余用法和取值与 -con 相同
save_name=save_name,    #控制文件名,格式可以是 .jpg, .png ,.bmp ,.gif ;
save_dir=os.getcwd() + "/images/"

下载文件

import wget 
  1. import os
  2. import time
  3. time.sleep(5)
fname = 'qrcode.exe' 
  1. if(os.path.isfile(fname)):
  2. os.remove(fname)
wget.download('http://www.#########.cn/soft/qrcode.exe', out=fname)

如果目录不存在,创建目录

ie = os.path.exists(path)
if not ie:
  os.makedirs(path)

pip 临时指定源

pip3 install XXX -i https://pypi.mirrors.ustc.edu.cn/simple/

中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/

清华大学 https://pypi.tuna.tsinghua.edu.cn/simple/

不支持http,必须使用https

time

import time

print(time.time())

print(time.ctime())

time.sleep(1)

print(time.strftime('%Y-%m-%d %H:%M:%S'))

django

安装 django

pip3 install django

import django print(django.get_version()) 显示版本号 安装成功

django-admin startproject hello1 创建新项目 python3 manage.py startapp blog 创建blog应用

python3 manage.py runserver 8080 运行 可以指定ip http://127.0.0.1:8080/ 访问

python3 manage.py migrate 创建用户相关表 python3 manage.py createsuperuser 创建超级用户 http://127.0.0.1:8080/admin/ 可以登陆进行用户管理

django 开通blog

在models.py里添加 from django.db import models

  1. Create your models here.

class Blog(models.Model):

   title = models.CharField('标题',max_length = 200) 
   author = models.ForeignKey( 
       'auth.User',on_delete=models.SET_NULL, 
       null=True,verbose_name='作者' 
       ) 
   content = models.TextField('内容') 
   def __str__(self): 
       return self.title 
 

在admin.py里添加 from django.contrib import admin

  1. Register your models here.

from blog.models import Blog @admin.register(Blog) class BlogAdmin(admin.ModelAdmin):

   pass 

在终端执行 python3 manage.py makemigrations python3 manage.py migrade python3 manage.py migrate blog 重新启动出现blog模块 python3 manage.py runserver 8080

django 实现加法函数

python3 manage.py startapp calc #新建app

修改一下 calc/views.py文件 from django.shortcuts import render from django.http import HttpResponse def add(request, a, b):

   c = int(a) + int(b) 
   return HttpResponse(str(c)) 
 

修改 urls.py 文件 from calc import views as calc_views # new urlpatterns = [

   path('admin/', admin.site.urls), 
   path('add/<int:a>/<int:b>/', calc_views.add, name='add'), 

]

访问网址http://127.0.0.1:8080/add/232/45/ 得到返回277

目录里生成html文档 方便web服务器下载

import string,os,sys

def list_all_files(dir):

   dl = open(os.path.join(dir,'filelist.html'),'w') 

dl.write('<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>文件列表</title><body>

') files = os.listdir(dir) for f in files: ff=os.path.join(dir,f) if os.path.isdir(ff): dl.writelines('')
           list_all_files(ff) 
       else: 
           #print(ff) 
dl.writelines('') dl.write('
<a href='+f+'/filelist.html>子目录:'+f+'</a>
<a href='+f+'>'+f+'</a>

</body></html>')

   dl.close()    

list_all_files(os.getcwd())

绘制图表

import numpy as np import matplotlib.pyplot as plt

x = np.arange(50) y1 = np.arange(50) for i in range(50):

   y1[i] = 2*x[i] + np.random.randint(0,5) 
 
  1. Adding Text Illustration 1

plt.figure() plt.plot(x,y1) plt.xlabel('Number Line') plt.ylabel('Function') plt.title('Rotating 90 degree') plt.text(30,20,'Matplotlib', rotation=90.)

  1. Adding Text Illustration 2

plt.figure() plt.plot(x,y1) plt.xlabel('Number Line') plt.ylabel('Function') plt.title('Rotating 180 degree') plt.text(30,20,'Matplotlib', fontsize=15, rotation=180.)

  1. Adding Text Illustration 3

plt.figure() plt.plot(x,y1) plt.xlabel('Number Line') plt.ylabel('Function') plt.title('Rotating -30 degree') plt.text(30,20,'Matplotlib', fontsize=15, color='g', rotation=-30.)

  1. Adding Text Illustration 4

plt.figure() plt.plot(x,y1) plt.xlabel('Number Line') plt.ylabel('Function') plt.title('Rotating 45 degree') plt.text(0,80, 'Matplotlib', bbox=dict(facecolor='yellow', alpha=0.5),

        fontsize=15, rotation=45.) 

plt.savefig('图片.png')#保存图片 plt.show()

压缩和解压文件

压缩

将本目录所有py文件压缩到dd.zip中

python -m zipfile -c dd.zip *.py

解压

将dd.zip解压到dd1目录里

python -m zipfile -e dd.zip dd1

操作excel文件

from openpyxl import Workbook wb = Workbook()

  1. 创建新的工作表
ws1 = wb.create_sheet("Mysheet")    # 默认最后一个
ws2 = wb.create_sheet("first",0)    # 一个
  1. 修改工作表名称
ws1.title = "New Title"
for sheet in wb:
    print(sheet)
ws3 = wb["New Title"]
ws3["A4"] = 123
ws1["B5"] = "diao"
ws2["c3"] = "写入信息"
ws2["c4"] = 12
ws2["c5"] = 13
ws2["c6"] = '=SUM(C4:C5)'
  1. 添加一行
row = [1,2,3,4,5]
ws2.append(row)


  1. 设置单元格风格--Style
from openpyxl.styles import Font, colors, Alignment
bold_itatic_24_font = Font(name='黑体', size=24, italic=True, bold=True,color = 'FFFF0000')
ws2['c3'].font = bold_itatic_24_font
  1. 对齐方式
ws2['c4'].alignment = Alignment(horizontal='center', vertical='center')
  1. 第2行行高
ws2.row_dimensions[4].height = 40
  1. C列列宽
ws2.column_dimensions['C'].width = 30
ws2.merge_cells('B8:d8') # 合并一行中的几个单元格
ws2['b8'] = "合并一行中的几个单元格"
  1. 保存文件
wb.save('simple_excel.xlsx')


  1. 读取
from openpyxl  import load_workbook   #导入模块
wb = load_workbook(filename = "simple_excel.xlsx",data_only=False)
  1. 打开文件, 默认可读写, 若有需要可以指定 write_only和read_only 为True
  2. 但是如果是读取的时候需要加上data_only=True 这样读到B9返回的就是数字, 如果不加这个参数, 返回的将是公式本身,如果excle文件没有被打开过,也就是公式没有被计算过,data_only=True会返回None
        1. 获得最大行和最大列
sheet = wb["first"]   # 找到工作表
print(sheet.max_row)
print(sheet.max_column)
print(sheet["c3"].value)   # 输出内容
print(sheet["c4"].value)   # 输出内容
print(sheet["c5"].value) 
print(sheet["c6"].value)
  1. 因为按行, 所以返回A1, B1, C1 这样的顺序
for row in sheet.rows:
   for cell in row:
       print(cell.value)


  1. A1, A2, A3 这样的顺序
for column in sheet.columns:
   for  cell in column:
       print(cell.value)
  1. 遍历行,对比数据
  2. se1 = load_workbook(filename = "A01-北京站线上培训名单.xlsx",data_only=False)

se1 = load_workbook(filename = "A02-宁夏站线上培训名单.xlsx",data_only=False)

  1. se1 = load_workbook(filename = "A03-陕西站线上培训名单.xlsx",data_only=False)

bold_itatic_24_font = Font(name='黑体', size=24, italic=True, bold=True,color = 'FFFF0000') for sheet1 in se1:

print(sheet1)
for rn1 in range(1,sheet1.max_row):
    
    for sheet in wb:
       #print(sheet)
       for rn in range(1,sheet.max_row):
        if(sheet.cell(rn,7).value == sheet1.cell(rn1,3).value):
           sheet1.cell(rn1,3).font = bold_itatic_24_font
           print( sheet1.cell(rn1,3).value)
           print( sheet1.cell(rn1,8).value)
           print( sheet1.cell(rn1,9).value)
           print(sheet)
           print( sheet.cell(rn,7).value)
           print( sheet.cell(rn,8).value)
           print( sheet.cell(rn,9).value)

se1.save('匹配后列表.xlsx')

绘制数学函数

import numpy as np
import matplotlib.pyplot as plt
X = np.linspace(-10, 10 * np.pi, 999)
YSinValues = np.sin(X)
YCosValues = np.cos(3*X)
plt.plot(X, YSinValues)
plt.plot(X, YCosValues)
plt.plot(X,np.log(X))
plt.show()

textToVoice

https://github.com/ranchlai/mandarin-tts

https://github.com/babysor/MockingBird gitee
使用国内源安装,仅支持python3.7-3.9,不能安装最新python

pip3 install torch -i https://pypi.tuna.tsinghua.edu.cn/simple

运行工具箱

python demo_toolbox.py -d .\samples


快速开始 (新手友好版) 本快速开始教程是以Windows为例的,假设不做任何训练(节省几小时甚至几天时间),假设你对python等开发环境也不熟悉,也可能没有支持CUDA的GPU

安装 如果已经确认安装过,请忽略该步骤

拉取本代码库

安装Anacodna, Python 3.8 或更高,参考中文教程,在Anaconda中创建并切换到独立虚拟环境后,进行以下步骤。

安装 PyTorch, 直接官网下载。如果GPU不支持CUDA,请默认选择。

验证本步骤是否成功:在系统任意路径下运行python,进入交互式编程界面后输入 import torch;, 回车, torch.cuda.is_available(), 回车。如果都是成功的话,可以进行下一步。

torch1

安装 ffmpeg。 1)下载 选择点击打开链接Windows对应的版本下载 2)解压 ffmpeg-xxxx.zip 文件到指定目录; 3)将解压后的文件目录中 bin 目录(包含 ffmpeg.exe )添加进 path 环境变量中; 4)进入 cmd,输入 ffmpeg -version,可验证当前系统是否识别 ffmpeg 以及查看 ffmpeg 的版本

运行pip install -r requirements.txt 来安装剩余的必要包。

确保本步骤不报错

安装 webrtcvad 用 pip install webrtcvad-wheels。 确保本步骤不报错

下载社区训练好的模型 在以下选择中下载模型

@miven https://pan.baidu.com/s/1PI-hM3sn5wbeChRryX-RCQ 提取码:2021 https://www.bilibili.com/video/BV1uh411B7AD/ 该模型与最新代码有兼容性问题 请查阅 https://github.com/babysor/MockingBird/issues/37 解决

下载完成后,确保 xxx.pt 格式的文件放在代码库的 synthesizer\saved_models文件夹下,saved_models如不存在请新建

运行demo_toolbox 在代码库路径下,运行 python demo_toolbox.py -d .\samples 尝试使用工具箱, 由于没有下载任何数据集,这里的功能比较简单:

确保界面左边中间的 synthesizer 选择了上一步中 xxx.pt 文件对应的模型。 点击Record录入你的5秒语音 输入任意文字 点击 Synthesizer and vocode 等待效果输出 tool1

使用技巧参考:https://zhuanlan.zhihu.com/p/425692267

使用系统内置朗读文字

pip install pyttsx3 -i https://pypi.tuna.tsinghua.edu.cn/simple
sudo apt-get install espeak #inux需要安装
import pyttsx3
eg = pyttsx3.init()
eg.setProperty('rate', 180)
print(str(eg.getProperty('rate')))
vc = eg.getProperty('voices')
#for v in vc:
# eg.setProperty('voice', v.id)
# print(v.id)
#eg.setProperty('voice','com.apple.speech.synthesis.voice.kyoko') #日文
#eg.setProperty('voice','com.apple.speech.synthesis.voice.uciana') #中文女声
eg.setProperty('voice','com.apple.speech.synthesis.voice.meijia')  #中文 
#eg.setProperty('voice','com.apple.speech.synthesis.voice.noranora') #中文1
#eg.setProperty('voice','com.apple.speech.synthesis.voice.sinji') #中文 粤语
#eg.setProperty('voice','com.apple.speech.synthesis.voice.tingting.yuna') #中文
eg.say("this is a test of raining day,你好,将声音保存到文件中")
# print(v.name)
eg.runAndWait()
eg.stop()

图片文字识别

#替代PIL
sudo pip3 install pillow -i https://pypi.tuna.tsinghua.edu.cn/simple
sudo pip3 install pytesseract  -i https://pypi.tuna.tsinghua.edu.cn/simple
sudo apt install tesseract-ocr
from PIL import Image
import pytesseract
im = Image.open('aa.png')
text=pytesseract.image_to_string(im)
print(text)

显示语言包

tesseract --list-langs

下载中文语言包

sudo wget https://github.com/tesseract-ocr/tessdata/blob/master/chi_sim.traineddata
sudo wget https://github.com/tesseract-ocr/tessdata/blob/master/chi_tra.traineddata

使用chromedriver抓去网页

chromedriver下载地址
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from time import sleep
import sys
#tmp = sys.stdout 
fp = open("chromedriverOutput.html","w")  
#sys.stdout = fp
souceaddress = 'https://www.lottery.gov.cn/jc/zqgdjj/?m=1012609'
print('<html><head><title> chromedriverOutput </title>')
print('<meta charset="utf-8" />')
print('<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" />')
print('<link rel="stylesheet" href="chromedriver.css" />')
print('</head> <body >')
print('<a href="'+souceaddress+'">数据来源网址</a>
') #chrome_opions = Options() #chrome_opions.add_argument("--headless") #chrome_opions.add_argument("--disble-gpu") #driver = webdriver.Chrome("./chromedriver") s = Service(executable_path='./chromedriver.exe') driver = webdriver.Chrome(service=s) #driver = webdriver.Chrome("") driver.get(htmladd) sleep(5) ttaabb = driver.find_element_by_id('table-race') print(ttaabb.get_attribute('innerHTML')) driver.get(souceaddress) sleep(5) ttaacc = driver.find_element_by_id('gdjj_997') print(ttaacc.get_attribute('innerHTML'))
print('</body></html>')
sys.stdout = tmp 
fp.close()

查看chrome://version/ 在chrome浏览器里输入chrome://version/查看版本

下载chromedriver

访问sqlserver数据

import pyodbc
server = 'localhost' 
database = 'WorkerList' 
username = 'user' 
password = 'password' 
cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER='+server+';DATABASE='+database+';UID='+username+';PWD='+ password)
cursor = cnxn.cursor()
cursor.execute("SELECT [storeID] ,[storeName]  FROM [WorkerList].[dbo].[work_store]")
rows = cursor.fetchall()
for row in rows:
  print(row[0])
  print(row[1])
cnxn.commit()
cnxn.close()

缩小图片

from PIL import Image
im = Image.open("IMG_0011.JPG")
#im.save("IMG_0011-out2.jpg", quality=20) # quality 是压缩比率
w, h = im.size
im.thumbnail((w // 4, h // 4))
im.save("girl-out.jpg")

文字表格

from prettytable import PrettyTable
row = PrettyTable()
row.field_names = ["Name", "Age", "Country", "City"]    # 增加表头
row.add_row(['shaw', '23', 'China', 'Shanghai'])        # 增加行数据
row.add_row(['charle', '29', 'China', 'Xuzhou'])
row.add_row(['jack', '32', 'United States', 'Washington'])
print(row)