今天分享幾段工作生活中常用的代碼,都是最為基礎(chǔ)的功能和操作,而且大多還都是出現(xiàn)頻率比較高的,很多都是可以拿來(lái)直接使用或者簡(jiǎn)單修改就可以放到自己的項(xiàng)目當(dāng)中。喜歡的記得收藏、關(guān)注、點(diǎn)贊。
廢話不多說(shuō),我們開始吧!
日期生成
很多時(shí)候我們需要批量生成日期,方法有很多,這里分享兩段Python代碼:
獲取過(guò)去N天的日期
importdatetime
defget_nday_list(n):
before_n_days=[]
foriinrange(1,n+1)[::-1]:
before_n_days.append(str(datetime.date.today()-datetime.timedelta(days=i)))
returnbefore_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']
生成一段時(shí)間內(nèi)的日期:
importdatetime
defcreate_assist_date(datestart=None,dateend=None):
#創(chuàng)建日期輔助表
ifdatestartisNone:
datestart='2016-01-01'
ifdateendisNone:
dateend=datetime.datetime.now().strftime('%Y-%m-%d')
#轉(zhuǎn)為日期格式
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'))
whiledatestart
#日期疊加一天
datestart+=datetime.timedelta(days=+1)
#日期轉(zhuǎn)字符串存入列表
date_list.append(datestart.strftime('%Y-%m-%d'))
returndate_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']
保存數(shù)據(jù)到CSV
保存數(shù)據(jù)到CSV是太常見的操作了,分享一段我個(gè)人比較喜歡的寫法:
defsave_data(data,date):
ifnotos.path.exists(r'2021_data_%s.csv'%date):
withopen("2021_data_%s.csv"%date,"a+",encoding='utf-8')asf:
f.write("標(biāo)題,熱度,時(shí)間,url\n")
foriindata:
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:
withopen("2021_data_%s.csv"%date,"a+",encoding='utf-8')asf:
foriindata:
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的優(yōu)秀Python實(shí)現(xiàn),受到眾多開發(fā)者的青睞,用Pyecharts作圖時(shí),使用一個(gè)舒服的背景也會(huì)給我們的圖表增色不少。
以餅圖為例,通過(guò)添加JavaScript代碼來(lái)改變背景顏色:
defpie_rosetype(data)->Pie:
background_color_js=(
"newecharts.graphic.LinearGradient(0,0,0,1,"
"[{offset:0,color:'#c86589'},{offset:1,color:'#06a7ff'}],false)"
)
c=(
Pie(init_opts=opts.InitOpts(bg_color=JsCode(background_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=""),
)
)
returnc
requests庫(kù)調(diào)用
據(jù)統(tǒng)計(jì),requests庫(kù)是Python家族里被引用得最多的第三方庫(kù),足見其江湖地位之高大!
發(fā)送GET請(qǐng)求:
importrequests
headers={
'user-agent':'Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/96.0.4664.110Safari/537.36',
'cookie':'some_cookie'
}
response=requests.request("GET",url,headers=headers)
發(fā)送POST請(qǐng)求:
importrequests
payload={}
files=[]
headers={
'user-agent':'Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/96.0.4664.110Safari/537.36',
'cookie':'some_cookie'
}
response=requests.request("POST",url,headers=headers,data=payload,files=files)
根據(jù)某些條件循環(huán)請(qǐng)求,比如根據(jù)生成的日期
defget_data(mydate):
date_list=create_assist_date(mydate)
url="https://test.test"
files=[]
headers={
'user-agent':'Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/96.0.4664.110Safari/537.36',
'cookie':''
}
fordindate_list:
payload={'p':'10',
'day':d,
'nodeid':'1',
't':'itemsbydate',
'c':'node'}
foriinrange(1,100):
payload['p']=str(i)
print("getdataof%sinpage%s"%(d,str(i)))
response=requests.request("POST",url,headers=headers,data=payload,files=files)
items=response.json()['data']['items']
ifitems:
save_data(items,d)
else:
break
Python操作各種數(shù)據(jù)庫(kù)
操作Redis
連接Redis
importredis
defredis_conn_pool():
pool=redis.ConnectionPool(host='localhost',port=6379,decode_responses=True)
rd=redis.Redis(connection_pool=pool)
returnrd
寫入Redis
fromredis_connimportredis_conn_pool
rd=redis_conn_pool()
rd.set('test_data','mytest')
操作MongoDB
連接MongoDB
frompymongoimportMongoClient
conn=MongoClient("mongodb://%s:%s@ipaddress:49974/mydb"%('username','password'))
db=conn.mydb
mongo_collection=db.mydata
批量插入數(shù)據(jù)
res=requests.get(url,params=query).json()
commentList=res['data']['commentList']
mongo_collection.insert_many(commentList)
操作MySQL
連接MySQL
importMySQLdb
#打開數(shù)據(jù)庫(kù)連接
db=MySQLdb.connect("localhost","testuser","test123","TESTDB",charset='utf8')
#使用cursor()方法獲取操作游標(biāo)
cursor=db.cursor()
執(zhí)行SQL語(yǔ)句
#使用execute方法執(zhí)行SQL語(yǔ)句
cursor.execute("SELECTVERSION()")
#使用fetchone()方法獲取一條數(shù)據(jù)
data=cursor.fetchone()
print"Databaseversion:%s"%data
#關(guān)閉數(shù)據(jù)庫(kù)連接
db.close()
Output:
Databaseversion:5.0.45
本地文件整理
整理文件涉及需求的比較多,這里分享的是將本地多個(gè)CSV文件整合成一個(gè)文件。
importpandasaspd
importos
df_list=[]
foriinos.listdir():
if"csv"ini:
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)
多線程代碼
多線程也有很多實(shí)現(xiàn)方式,我們選擇自己最為熟悉順手的方式即可。
importthreading
importtime
exitFlag=0
classmyThread(threading.Thread):
def__init__(self,threadID,name,delay):
threading.Thread.__init__(self)
self.threadID=threadID
self.name=name
self.delay=delay
defrun(self):
print("開始線程:"+self.name)
print_time(self.name,self.delay,5)
print("退出線程:"+self.name)
defprint_time(threadName,delay,counter):
whilecounter:
ifexitFlag:
threadName.exit()
time.sleep(delay)
print("%s:%s"%(threadName,time.ctime(time.time())))
counter-=1
#創(chuàng)建新線程
thread1=myThread(1,"Thread-1",1)
thread2=myThread(2,"Thread-2",2)
#開啟新線程
thread1.start()
thread2.start()
thread1.join()
thread2.join()
print("退出主線程")
異步編程代碼
異步爬取網(wǎng)站
importasyncio
importaiohttp
importaiofiles
asyncdefget_html(session,url):
try:
asyncwithsession.get(url=url,timeout=8)asresp:
ifnotresp.status//100==2:
print(resp.status)
print("爬取",url,"出現(xiàn)錯(cuò)誤")
else:
resp.encoding='utf-8'
text=awaitresp.text()
returntext
exceptExceptionase:
print("出現(xiàn)錯(cuò)誤",e)
awaitget_html(session,url)
使用異步請(qǐng)求之后,對(duì)應(yīng)的文件保存也需要使用異步,即是一處異步,處處異步。
asyncdefdownload(title_list,content_list):
asyncwithaiofiles.open('{}.txt'.format(title_list[0]),'a',
encoding='utf-8')asf:
awaitf.write('{}'.format(str(content_list)))
以上就是我平時(shí)用得最多的代碼片段,希望對(duì)你有所幫助。
以上內(nèi)容為大家介紹了分享幾段有用的Python代碼,希望對(duì)大家有所幫助,如果想要了解更多Python相關(guān)知識(shí),請(qǐng)關(guān)注多測(cè)師。http://www.kei0345678.cn/xwzx/