是php后端强?还是python后端强?
是php后端强?还是python后端强?做为初学者的话若是要学习后端研发和运维,二选一的话,应该选取哪个方向?请说明你的理由?
还是Python更强有些,从这些年两种语言的发展以及火热程度上亦能看出来,Python已然全面碾压php了,虽然可能会有非常多人跳出来讲php是最好的语言,然则非常多时候,承认亦是一种进步!
为何要学习Python?
在学习Python之前,你不要担心自己没基本或“脑子笨”,我始终认为,只要你想学并为之奋斗,就能学好,就能用Python去做非常多事情。在这个喧嚣的时代,非常多技术或概念会持续兴起,我期盼你能沉下心来去学习,不要急于求成,一步一个脚印。当你把某个技术学好、学精后,还是能做有些事情的,乃至能找到爱好的工作或完成实践项目。
程序语言无最好,仅有最适合。做为一名初学者,我非常举荐你学习Python,为啥?一方面是由于它拥有语法清晰、代码友好、易读性高的特点,同期Python持有强大的第三方库函数,包含网络爬取、数据分析、可视化、人工智能等;另一方面Python既是一门解释性编程语言,又是面向对象的语言,其操作性和可移植性高,被广泛应用于数据挖掘、信息采集、人工智能、网络安全、自动化测试等行业。乃至,非常多小学生、高中课程和计算机二级亦都持续增多了Python。
Python优良
Python最大的优良在于效率。有时候程序员或科研工作者的效率比设备的效率更重要,针对非常多繁杂性的功能,运用更加清晰的语言能给程序减少更加多的包袱,从而大大加强程序的质量,其易学性和扩展性亦能让新手火速上手。虽然Python底层运行速度要比C语言慢,但Python清晰的结构能解放程序员的时间,同期很方便的和其他编程语言代码(如C语言)融合在一块。
所以,从来无一种编程语言能够像Python这般同期扎根在这么多行业,并且Python支持跨平台操作,亦支持开源,持有强大的第三方库。尤其随着人工智能的连续火热,Python在IEEE近几年发布的最热门语言中多次排名第1,越来越多的程序兴趣者、科技关注者亦都起始学习Python。
编程环境配置
Python是一种解释性语言,它运用解释器来解释和执行代码,这对用户来讲省去了C或C++之类语言的编译过程,直接从源代码就可运行,因此呢更易编写和调试。工欲善其事,必先利其器。在学习Python编程之前,先让咱们安装好相应的工具并对编程环境进行设置。
首要进入Python官方下载频道 https://www.python.org/downloads,点击“Download Python 3.11.2”按钮进入下载页面(此数字会随着版本的升级而改变)。找到适合自己系统的下载链接,例如笔者为Windows的64位系统,因此选取下载了“Windows installer (64-bit)”。双击下载所得的EXE可执行文件起步Python安装向导。
勾选“Add python.exe to PATH”项,这般就不消后期手动将Python程序添加到系统路径中了。点击“Install Now”就可自动安装。倘若不期盼安装到默认的C盘,能够点击“Customize installation”自定义安装项,按照向导提示一步步安装。
做为初学者选取默认安装选项就可。安装成功后,针对Windows系统将会有一个“Disable path length limit(禁用路径长度限制)”的提示,这是由于Windows系统能够处理的文件路径长度有必定的限制。点击禁用这一限制能够避免处理长文件路径时显现的调试问题,不外这亦可能引起与旧版本Windows 10的兼容性问题。针对咱们初学者来讲能够暂时跳过此选项,由于以后有必须时还能够修改注册表来处理。
点击“Close”按钮关闭安装向导。此刻咱们测试Python是不是安装成功。按Win+R键调出运行对话框,输入“cmd”后按回车键打开命令提示符窗口,而后输入“python”并按回车,倘若能够表示出Python版本等信息内容,并且提示符变成为了“>>>”,则暗示安装成功了。此时可输入一行测试代码: print("嗨,欢迎来到Python世界!")
按回车键执行,就可得到“嗨,欢迎来到Python世界!”的表示信息。几乎每种编程语言教程中都会展示一下“hello, world!”程序,虽然很俗套,但不得不说Python的实现是如此的简单。紧接着执行代码“exit()”退出Python环境,完成此一周期的测试。
命令提示符的界面过于简陋,咱们能够试试Python自带的IDLE交互式研发环境。点击系统“起始”按钮,在起始菜单顶部的近期添加中就能够看到“IDLE(Pyton 3.11 64-bit)”程序了,点击就可打开。
IDLE经过区别的颜色区分代码及执行结果,清晰明了。尤其方便的是,当咱们输入某个函数时,它会智能表示参数提示,辅助咱们输入代码,非常方便。
PyCharm 运用
IDE是Integrated Development Environment的缩写,意为集成研发环境,重点用来辅助程序研发。Python并不必定必须IDE,由于它能够在任何文本编辑器中编写并从命令行运行。然则IDE能够供给许多辅助功能,例如代码调试、智能完成和语法高亮表示等。另一,IDE还能够供给重构、代码导航和项目管理等工具,这些工具能够帮忙咱们更快、更容易地编写Python代码,并且能够更容易地调试和守护代码。
Python研发人员有多种IDE可用,相对来讲PyCharm是个非常不错的选取,它能够让Python研发过程变得更加容易和有效。值得叫作道的是,PyCharm供给一个强大的社区版本,可以避免费运用,并且能够在网上得到免费支持。
首要进入PyCharm主页 https://www.jetbrains.com/pycharm,点击“DOWNLOAD”按钮进入下载频道,在“Windows”选项卡下能够看到“Professional(专业版)”和“Community(社区版)”两种版本,其中社区版是免费的,点击其下的“Download”按钮下载就可。比较而言,社区版缺少对科学工具、网站研发、Web框架、远程研发、数据库等的支持,不外针对一个初学者来讲,这些影响不大。
学习大纲
基本语法
针对底层基本,肯定是把握得越多、越牢靠越好~ 环境搭建Python安装研发工具 - PyCharm,VS Code,Jupyter Notebook变量定义变量命名规则基本数据类型类型转换运算符和表达式基本数据结构字符串列表字典集合元组流程掌控要求循环函数调用函数定义函数函数参数lambda 函数功效域重要内置函数函数式编程面向对象编程类和对象拜访限制装饰器封装继承多态类办法实例办法静态办法反射模块运用模块安装模块常用模块反常调试测试反常捕捉try...else...finally 结构自定义反常调试单元测试文档测试进阶知识正则表达式数据库编程知识并发编程网络编程IO 编程图形界面
Web 研发Web 基本HTTP 基本HTML 基本CSS 基本JavaScript 基本WSGIRestful APIFlask脚手架蓝图DjangoMVT 模式模板模型视图路由中间件FastAPI
爬虫基本知识爬虫概念合法性重视点数据采集与解析HTTP 基本知识Web 基本知识Socket 知识Requets 库正则表达式Xpath多种采集方式同步采集异步采集SeleniumAJAXPyppeteer中间人代理CharlesMitmproxyHttpCanary爬虫框架ScrapyCrawleySeleniumPySpider反爬虫信息校验型动态渲染型文本混淆型特征识别型验证码JS 混淆多终端爬虫Web 采集APP 采集小程序采集数据去重断点采集增量采集存储知识本地文件MySQLRedisMongoDBPandas
自动化运维Linux 知识shell 知识运维关联库ansibleParamikopsutildnspythonIPy常用运维工具
自动化测试测试基本接口测试Web 页面测试App 测试SeleniumPytestUnitTestRobot FrameworkBehaveLocustLettuce
数据分析常用工具Jupyter NotebookConda常用类库NumpyPandasMatplotlib数据处理数据获取数据清洗数据合并/连接/聚合数据可视化SeabornPlotlyPyecharts
人工智能数学知识高等数学线性代数矩阵理论概率论统计学设备学习设备学习流程特征工工程模型常用算法常用库深度学习算法重点技术分支计算机视觉自然语言处理自动驾驶群体智能智能芯片
常用类库
Python 的各种第三方类库是非常丰富的,这亦是 Python 能够如此流行的一大原由,基本咱们要做什么东西都能找到对应的类库,直接看文档用就行了,大大加强研发效率!
类库太多了,直接看照片吧
高级脚本
每日咱们都会面临许多必须高级编码的编程挑战。你不可用简单的 Python 基本语法来处理这些问题。下面分享 13 个高级 Python 脚本,它们能够作为你项目中的方便工具。
1.运用 Python 进行速度测试
这个高级脚本帮忙你运用 Python 测试你的 Internet 速度。只需安装速度测试模块并运行以下代码。 # pip install pyspeedtest
# pip install speedtest
# pip install speedtest-cli
#method 1
import speedtest
speedTest = speedtest.Speedtest()
print(speedTest.get_best_server())
#Check download speed
print(speedTest.download())#Check upload speed
print(speedTest.upload())
# Method 2
importpyspeedtest
st = pyspeedtest.SpeedTest()
st.ping()
st.download()
st.upload()2.在谷歌上搜索
你能够从 Google 搜索引擎中提取重定向 URL,安装以下提及模块并遵循代码。 # pip install google
from googlesearch import search
query = "Medium.com"
for url in search(query):
print(url)
3.制作网络设备人
该脚本将帮忙你运用 Python 自动化网站。你能够构建一个可掌控任何网站的网络设备人。查看下面的代码,这个脚本在网络抓取和网络自动化中很方便。 # pip install selenium
import time
from selenium import webdriver
from selenium.webdriver.common.keys
import Keysbot = webdriver.Chrome("chromedriver.exe")
bot.get(http://www.google.com)
search = bot.find_element_by_name(q)
search.send_keys("@codedev101")
search.send_keys(Keys.RETURN)
time.sleep(5)
bot.quit()
4.获取歌曲歌词
这个高级脚本将向你展示怎样从任何歌曲中获取歌词。首要,你必要从 Lyricsgenius 网站得到免费的 API 密钥,而后,你必要遵循以下代码。 # pip install lyricsgenius
import lyricsgenius
api_key = "xxxxxxxxxxxxxxxxxxxxx"genius = lyricsgenius.Genius(api_key)
artist = genius.search_artist("Pop Smoke",
max_songs=5,sort="title")
song = artist.song("100k On a Coupe")
print(song.lyrics)5.获取照片的Exif数据
运用 Python Pillow 模块获取任何照片的 Exif 数据。查看下面说到的代码。我供给了两种办法来提取照片的 Exif 数据。 # Get Exif of Photo
# Method 1
# pip install pillow
import PIL.Image
import PIL.ExifTags
img = PIL.Image.open("Img.jpg")
exif_data =
{
PIL.ExifTags.TAGS[i]: j
for i, j in img._getexif().items()
if i in PIL.ExifTags.TAGS
}
print(exif_data)
# Method 2
# pip install ExifRead
import exifread
filename = open(path_name, rb)
tags = exifread.process_file(filename)
print(tags)
6.提取图像中的 OCR 文本
OCR 是一种从数字和扫描文档中识别文本的办法。许多研发人员运用它来读取手写数据,下面的 Python 代码能够将扫描的图像转换为 OCR 文本格式。
重视:你必要从 Github 下载 tesseract.exe # pip install pytesseract
importpytesseractfrom PIL import Image
pytesseract.pytesseract.tesseract_cmd = rC:\Program Files\Tesseract-OCR\tesseract.exe
t=Image.open("img.png")
text = pytesseract.image_to_string(t, config=)
print(text)7.将照片转换为Cartonize
这个简单的高级脚本会将你的照片转换为 Cartonize 格式。查看下面的示例代码并尝试一下。 # pip install opencv-pythonimport cv2
img = cv2.imread(img.jpg)
grayimg = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
grayimg = cv2.medianBlur(grayimg, 5)
edges = cv2.Laplacian(grayimg , cv2.CV_8U, ksize=5)
r,mask =cv2.threshold(edges,100,255,cv2.THRESH_BINARY_INV)
img2 = cv2.bitwise_and(img, img, mask=mask)
img2 = cv2.medianBlur(img2, 5)
cv2.imwrite("cartooned.jpg", mask)
8.清空回收站
这个简单的脚本能够让你用 Python 清空你的回收站,查看下面的代码以认识怎样操作。 # pip install winshell
importwinshelltry:
winshell.recycle_bin().empty(confirm=False, /show_progress=False, sound=True)
print("Recycle bin is emptied Now")
except:
print("Recycle bin already empty")
9.Python 图像加强
运用 Python Pillow 库加强你的照片以使其看起来更好。在下面的代码中,我实现了四种办法来加强任何照片。 # pip install pillow
from PIL import Image,ImageFilter
from PIL import ImageEnhance
im = Image.open(img.jpg)
# Choose your filter
# add Hastag at start if you dont want to any filter belowen = ImageEnhance.Color(im)
en = ImageEnhance.Contrast(im)
en = ImageEnhance.Brightness(im)
en = ImageEnhance.Sharpness(im)# result
en.enhance(1.5).show("enhanced")
10.获取 Window 版本
这个简单的脚本将帮忙你得到当前运用的完整窗口版本。 # Window Versionimport wmi
data = wmi.WMI()
for os_name in data.Win32_OperatingSystem():
print(os_name.Caption)
# Microsoft Windows 11 Home
11.将 PDF 转换为图像
运用以下代码将所有 Pdf 页转换为图像。 # PDF to Images
import fitz
pdf = sample_pdf.pdf
doc = fitz.open(pdf)
for page in doc:
pix = page.getPixmap(alpha=False)
pix.writePNG(page-%i.png % page.number)
12.转换:十六进制到 RGB
该脚本将简单地将 Hex 转换为 RGB。查看下面的示例代码。 # Conversion: Hex to RGB
def Hex_to_Rgb(hex):h = hex.lstrip(#)
return tuple(int(h[i:i+2], 16) for i in (0, 2, 4))
print(Hex_to_Rgb(#c96d9d)) # (201, 109, 157)
print(Hex_to_Rgb(#fa0515)) # (250, 5, 21)
13.网站状态
你能够运用 Python 检测网站是不是正常运行。检测以下代码,表示200 ,暗示网站已起步,倘若表示为 404 ,则暗示网站已关闭。 # pip install requests
#method 1
import urllib.request
from urllib.request importRequest, urlopenreq = Request(https://medium.com/@pythonians, headers={User-Agent: Mozilla/5.0})
webpage = urlopen(req).getcode()
print(webpage) # 200
# method 2
import requests
r = requests.get("https://medium.com/@pythonians")
print(r.status_code) # 200
祖传代码
这儿再分享几段工作生活中常用的代码,都是最为基本的功能和操作,况且大多还都是显现频率比较高的,非常多都是能够拿来直接运用或简单修改就能够放到自己的项目其中
日期生成
非常多时候咱们必须批量生成日期,办法有非常多,这儿分享两段代码
获取过去 N 天的日期 import datetime
def get_nday_list(n):
before_n_days = []
for i in range(1, n + 1)[::-1]:
before_n_days.append(str(datetime.date.today() - datetime.timedelta(days=i)))
return before_n_days
a = get_nday_list(30)
print(a)
Output: [2021-12-23, 2021-12-24, 2021-12-25, 2021-12-26, 2021-12-27, 2021-12-28, 2021-12-29, 2021-12-30, 2021-12-31, 2022-01-01, 2022-01-02, 2022-01-03, 2022-01-04, 2022-01-05, 2022-01-06, 2022-01-07, 2022-01-08, 2022-01-09, 2022-01-10, 2022-01-11, 2022-01-12, 2022-01-13, 2022-01-14, 2022-01-15, 2022-01-16, 2022-01-17, 2022-01-18, 2022-01-19, 2022-01-20, 2022-01-21]
生成一段时间区间内的日期 import datetime
def create_assist_date(datestart = None,dateend = None):
# 创建日期辅助表
if datestart is None:
datestart = 2016-01-01
ifdateendis None:
dateend = datetime.datetime.now().strftime(%Y-%m-%d)
# 转为日期格式
datestart=datetime.datetime.strptime(datestart,%Y-%m-%d)
dateend=datetime.datetime.strptime(dateend,%Y-%m-%d)
date_list = []
date_list.append(datestart.strftime(%Y-%m-%d))
while datestart<dateend:
# 日期叠加一天datestart+=datetime.timedelta(days=+1)
# 日期转字符串存入列表
date_list.append(datestart.strftime(%Y-%m-%d))
return date_list
d_list = create_assist_date(datestart=2021-12-27, dateend=2021-12-30)
d_list
Output: [2021-12-27, 2021-12-28, 2021-12-29, 2021-12-30]
保留数据到CSV
保留数据到 CSV 是太平常的操作了,分享一段我个人比较爱好的写法 def save_data(data, date):
if not os.path.exists(r2021_data_%s.csv % date):with open("2021_data_%s.csv" % date, "a+", encoding=utf-8) as f:
f.write("标题,热度,时间,url\n")
for i in data:
title = i["title"]
extra = i["extra"]
time = i[time]
url = i["url"]
row = {},{},{},{}.format(title,extra,time,url)
f.write(row)
f.write(\n)
else:
with open("2021_data_%s.csv" % date, "a+", encoding=utf-8) as f:
for i in data:
title = i["title"]
extra = i["extra"]
time = i[time]
url = i["url"]
row = {},{},{},{}.format(title,extra,time,url)
f.write(row)
f.write(\n)
带背景颜色的 Pyecharts
Pyecharts 做为 Echarts 的优秀 Python 实现,受到众多研发者的喜爱,用 Pyecharts 作图时,运用一个舒服的背景亦会给咱们的图表增色不少
以饼图为例,经过添加 JavaScript 代码来改变背景颜色 def pie_rosetype(data) -> Pie:
bac公斤round_color_js = (
"new echarts.graphic.LinearGradient(0, 0, 0, 1, "
"[{offset: 0, color: #c86589}, {offset: 1, color: #06a7ff}], false)")
c = (
Pie(init_opts=opts.InitOpts(bg_color=JsCode(bac公斤round_color_js)))
.add("",
data,
radius=["30%", "75%"],
center=["45%", "50%"],
rosetype="radius",
label_opts=opts.LabelOpts(formatter="{b}: {c}"),
)
.set_global_opts(title_opts=opts.TitleOpts(title=""),
)
)
return c
requests 库调用
据统计,requests 库是 Python 家族里被引用的最多的第三方库,足见其江湖地位之高挑!
发送 GET 请求 import requests
headers = {
user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36,
cookie: some_cookie
}
response = requests.request("GET", url, headers=headers)
发送 POST 请求 importrequests
payload={}
files=[]
headers = {user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36,
cookie: some_cookie
}
response = requests.request("POST", url, headers=headers, data=payload, files=files)
按照某些要求循环请求,例如按照生成的日期 def get_data(mydate):date_list = create_assist_date(mydate)
url ="https://test.test"
files=[]
headers = {
user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36,
cookie:
}
for d in date_list:
payload={p: 10,
day: d,
nodeid: 1,
t: itemsbydate,
c: node}
for i in range(1, 100):
payload[p] = str(i)
print("get data of %s in page %s" % (d, str(i)))
response = requests.request("POST", url, headers=headers, data=payload, files=files)
items = response.json()[data][items]
if items:
save_data(items, d)
else:
break
Python 操作各样数据库
操作 Redis
连接 Redis import redis
def redis_conn_pool():
pool = redis.ConnectionPool(host=localhost, port=6379, decode_responses=True)
rd = redis.Redis(connection_pool=pool)
return rd
写入 Redis from redis_conn import redis_conn_pool
rd = redis_conn_pool()
rd.set(test_data, mytest)
操作 MongoDB
连接 MongoDB from pymongo import MongoClient
conn = MongoClient("mongodb://%s:%s@ipaddress:49974/mydb" % (username, password))
db = conn.mydb
mongo_collection = db.mydata
批量插进数据 res = requests.get(url, params=query).json()
commentList = res[data][commentList]
mongo_collection.insert_many(commentList)
操作 MySQL
连接 MySQL import MySQLdb
# 打开数据库连接
db = MySQLdb.connect("localhost", "testuser", "test123", "TESTDB", charset=utf8 )
# 运用cursor()办法获取操作游标
cursor = db.cursor()
执行 SQL 语句 # 使用 execute 办法执行 SQL 语句
cursor.execute("SELECT VERSION()")
# 运用 fetchone() 办法获取一条数据
data = cursor.fetchone()
print "Database version : %s " % data
# 关闭数据库连接db.close()Output: Database version : 5.0.45
本地文件整理
整理文件触及需求的比较多,这儿分享的是将本地多个 CSV 文件整合成一个文件 import pandas as pd
import os
df_list = []
for i in os.listdir():
if "csv" in i:
day = i.split(.)[0].split(_)[-1]
df = pd.read_csv(i)
df[day] = day
df_list.append(df)
df = pd.concat(df_list, axis=0)
df.to_csv("total.txt", index=0)
多线程代码
多线程亦有非常多实现方式,咱们选取自己最为熟练顺手的方式就可 import threading
import time
exitFlag = 0
class myThread (threading.Thread):
def __init__(self, threadID, name, delay):
threading.Thread.__init__(self)
self.threadID = threadID
self.name = name
self.delay = delay
def run(self):
print ("起始线程:" + self.name)
print_time(self.name, self.delay, 5)
print ("退出线程:" + self.name)
def print_time(threadName, delay, counter):
while counter:
if exitFlag:
threadName.exit()
time.sleep(delay)
print ("%s: %s" % (threadName, time.ctime(time.time())))
counter -= 1
# 创建新线程
thread1 = myThread(1,"Thread-1", 1)
thread2 = myThread(2, "Thread-2", 2)
# 开启新线程
thread1.start()
thread2.start()
thread1.join()
thread2.join()
print ("退出主线程")
异步编程代码
异步爬取网站 import asyncio
import aiohttp
import aiofiles
async def get_html(session, url):
try:
async with session.get(url=url, timeout=8) as resp:
if notresp.status //100 == 2:
print(resp.status)
print("爬取", url, "显现错误")
else:
resp.encoding = utf-8
text = await resp.text()
return text
except Exception ase:
print("显现错误", e)
await get_html(session, url)
运用异步请求之后,对应的文件保留亦必须运用异步,即是一处异步,处处异步 async def download(title_list, content_list):
async with aiofiles.open({}.txt.format(title_list[0]), a,
encoding=utf-8) as f:
await f.write({}.format(str(content_list)))
|