利用PYTHON畫的各種圖
2016-09-29 16:32
399 查看
__author__ = 'kong' import matplotlib from mpl_toolkits.basemap import Basemap, shiftgrid#,cm from matplotlib import cm import matplotlib.pyplot as plt from matplotlib.colors import LogNorm import netCDF4 as nc import numpy as np from matplotlib import gridspec import math import matplotlib.tri as tri import matplotlib.colors as matcolor def drawlljfrequency1(): #draw llj frequency for every month every hour da=nc.Dataset("data//lljfrequency") month=da.variables["month"][:] hour=da.variables["hour"][:] lljnum=da.variables["lljnum"][:] totalnum=da.variables["totalnum"][:] data=lljnum/totalnum plt.matshow(data,cmap=plt.cm.seismic,fignum=0) plt.colorbar(orientation="horizontal") plt.xticks(hour) plt.yticks(np.arange(3),("May","Jun","Jul")) plt.xlabel("Hour") plt.ylabel("Month") plt.savefig("20160921//1"+".png", dpi=1000)#max dpi2300 plt.show() def drawlljfrequency2(): #draw llj frequency for every hour da=nc.Dataset("data//lljfrequency") month=da.variables["month"][:] hour=da.variables["hour"][:] lljnum=da.variables["lljnum"][:] totalnum=da.variables["totalnum"][:] data=np.sum(lljnum,0)/np.sum(totalnum,0) plt.bar(np.arange(0,24,1),data,1,color="royalblue") plt.xticks(0.5+np.arange(0,24,1),np.arange(0,24,1)) plt.xlim([0,24]) plt.xlabel("Hour") plt.ylabel("Percent Frequency of Occurrence") plt.savefig("20160921//2"+".png", dpi=1000)#max dpi2300 plt.show() def drawlljfrequency3(): #draw llj frequency for every month da=nc.Dataset("data//lljfrequency") month=da.variables["month"][:] hour=da.variables["hour"][:] lljnum=da.variables["lljnum"][:] totalnum=da.variables["totalnum"][:] data=np.sum(lljnum,1)/np.sum(totalnum,1) plt.barh(np.arange(0,3,1),data,1,color="royalblue") plt.yticks(0.5+np.arange(0,3,1),["May","Jun","Jul"]) plt.xticks([0,data[-1]],["",""]) for i in np.arange(0,3,1): plt.text(data[i]/2,0.5+i,data[i],weight="bold") plt.ylabel("Month") plt.xlabel("Percent Frequency of Occurrence") plt.savefig("20160921//3"+".png", dpi=1000)#max dpi2300 plt.show() def drawheightdis(): #draw llj height distritubion da=nc.Dataset("data//lljheight") aa=da.variables["num"][:] bb=da.variables["xlabel"][:] plt.bar(bb[0:-1],aa,50,color="royalblue") plt.ylabel("Frequency") plt.xlabel("Height (m)") plt.savefig("20160921//4"+".png", dpi=1000)#max dpi2300 plt.show() def drawwindspedis(): #draw llj wind speed distritubion da=nc.Dataset("data//lljwind") windaa=da.variables["wind_num"][:] windbb=da.variables["wind_xlabel"][:] plt.bar(windbb[0:-1],windaa,0.5,color="royalblue") plt.ylabel("Frequency") plt.xlabel("Wind (m/s)") plt.savefig("20160921//5"+".png", dpi=1000)#max dpi2300 plt.show() def drawwinddirdis(): #draw llj wind direction distritubion da=nc.Dataset("data//lljwind") degaa=da.variables["d_num"][:] degbb=da.variables["d_xlabel"][:] plt.bar(degbb[0:-1],degaa,6,color="royalblue") plt.ylabel("Frequency") plt.xlabel("Wind Direction(degree)") plt.savefig("20160921//6"+".png", dpi=1000)#max dpi2300 plt.show() def draw950average1(): month=7 da=nc.Dataset("data//950hPa_average_in_0%d"%month) u=da.variables["u"][:] v=da.variables["v"][:] z=da.variables["z"][:] wind=da.variables["wind"][:] lon=da.variables["lon"][:] lat=da.variables["lat"][:] plt.figure() lon1=105 lon2=111 lat1=18.5 lat2=21 m = Basemap(projection='rotpole',o_lat_p=84,o_lon_p=00,lon_0=0,lat_0=0,lat_1=lat1,lat_2=lat2,lon_1=lon1+1,lon_2=lon2-1,llcrnrlat=lat1,urcrnrlat=lat2,llcrnrlon=lon1,urcrnrlon=lon2,resolution='h') m.drawcoastlines(color='#2e5244',linewidth=1) m.drawcountries(color='#2e5244',linewidth=1) m.drawparallels(np.arange(0.,90.,1),labels=[1,0,0,0]) m.drawmeridians(np.arange(0.,180.1),labels=[0,0,0,1]) plt.title("950hPa in %d"%month,x=0.5,y=1.15,size='xx-large') x, y = m(lon,lat) print(np.min(z)) print(math.floor(np.min(z))) print(np.max(z)) print(math.ceil(np.max(z))) csslev = np.arange(math.floor(np.min(z)),math.ceil(np.max(z)),1) css = m.contour(x,y,z,csslev,linewidths=0.8,colors='k') plt.clabel(css, inline=0,fontsize=10) #cslev = np.arange(np.min(wind)-0.1,np.max(wind)+0.1,0.1) cslev = np.arange(4.3,12,0.1) cs = m.contourf(x,y,wind,cslev,cmap=cm.coolwarm) cbar = m.colorbar(cs,location='bottom',pad="8%") cbar.set_label('average wind speed (m/s)') vectorsize=10 rho=3 Q = m.quiver(x[::rho,::rho],y[::rho,::rho],u[::rho,::rho],v[::rho,::rho],width=vectorsize,headwidth=vectorsize*2/3,headlength=vectorsize/2,headaxislength=vectorsize/2,minlength=0,units='dots',angles='xy', scale_units='xy', scale=20,minshaft=0.5) qk = plt.quiverkey(Q, 0.1,1.1, 20, '20 m/s', labelpos='S') plt.savefig("20160921//averagein%d"%month+".png", dpi=1000)#max dpi2300 #plt.show() def draw950average2(): month=5 da=nc.Dataset("data//950hPa_average_in_0%d"%month) u=da.variables["u"][:] v=da.variables["v"][:] z=da.variables["z"][:] wind=np.sqrt(u**2+v**2) lon=da.variables["lon"][:] lat=da.variables["lat"][:] plt.figure() lon1=105 lon2=111 lat1=18.5 lat2=21 m = Basemap(projection='rotpole',o_lat_p=84,o_lon_p=00,lon_0=0,lat_0=0,lat_1=lat1,lat_2=lat2,lon_1=lon1+1,lon_2=lon2-1,llcrnrlat=lat1,urcrnrlat=lat2,llcrnrlon=lon1,urcrnrlon=lon2,resolution='h') m.drawcoastlines(color='#2e5244',linewidth=1) m.drawcountries(color='#2e5244',linewidth=1) m.drawparallels(np.arange(0.,90.,1),labels=[1,0,0,0]) m.drawmeridians(np.arange(0.,180.1),labels=[0,0,0,1]) plt.title("950hPa in %d"%month,x=0.5,y=1.15,size='xx-large') x, y = m(lon,lat) print(np.min(z)) print(math.floor(np.min(z))) print(np.max(z)) print(math.ceil(np.max(z))) csslev = np.arange(math.floor(np.min(z)),math.ceil(np.max(z)),1) css = m.contour(x,y,z,csslev,linewidths=0.8,colors='k') plt.clabel(css, inline=0,fontsize=10) #cslev = np.arange(np.min(wind)-0.1,np.max(wind)+0.1,0.1) cslev = np.arange(0,11.2,0.1) cs = m.contourf(x,y,wind,cslev,cmap=cm.coolwarm) cbar = m.colorbar(cs,location='bottom',pad="8%") cbar.set_label('wind speed (m/s)') vectorsize=10 rho=3 Q = m.quiver(x[::rho,::rho],y[::rho,::rho],u[::rho,::rho],v[::rho,::rho],width=vectorsize,headwidth=vectorsize*2/3,headlength=vectorsize/2,headaxislength=vectorsize/2,minlength=0,units='dots',angles='xy', scale_units='xy', scale=20,minshaft=0.5) qk = plt.quiverkey(Q, 0.1,1.1, 20, '20 m/s', labelpos='S') plt.savefig("20160921//average2in%d"%month+".png", dpi=1000)#max dpi2300 #plt.show() def drawgeowindspedis(): #draw llj geo wind speed distritubion da=nc.Dataset("data//lljgeowind") windaa=da.variables["wind_num"][:] windbb=da.variables["wind_xlabel"][:] plt.bar(windbb[0:-1],windaa,0.5,color="royalblue") plt.ylabel("Frequency") plt.xlabel("Geo Wind (m/s)") plt.savefig("20160921//9"+".png", dpi=1000)#max dpi2300 def drawgeowinddiedis(): #draw llj geo wind direction distritubion da=nc.Dataset("data//lljgeowind") degaa=da.variables["d_num"][:] degbb=da.variables["d_xlabel"][:] plt.bar(degbb[0:-1],degaa,6,color="royalblue") plt.ylabel("Frequency") plt.xlabel("Geo Wind Direction(degree)") plt.savefig("20160921//10"+".png", dpi=1000)#max dpi2300 #plt.show() def drawageowindspedis(): #draw llj ageo wind speed distritubion da=nc.Dataset("data//lljageowind") windaa=da.variables["wind_num"][:] windbb=da.variables["wind_xlabel"][:] plt.bar(windbb[0:-1],windaa,0.5,color="royalblue") plt.ylabel("Frequency") plt.xlabel("Ageo Wind (m/s)") plt.savefig("20160921//11"+".png", dpi=1000)#max dpi2300 #plt.show() def drawageowinddirdis(): #draw llj ageo wind direction distritubion da=nc.Dataset("data//lljageowind") degaa=da.variables["d_num"][:] degbb=da.variables["d_xlabel"][:] plt.bar(degbb[0:-1],degaa,6,color="royalblue") plt.ylabel("Frequency") plt.xlabel("Ageo Wind Direction(degree)") plt.savefig("20160921//12"+".png", dpi=1000)#max dpi2300 #plt.show() def drawwindrose(): filename="data//lljageowindrosedata" plttitle="AGeo Wind Rose when LLJ" da=nc.Dataset(filename) a=da.variables["a"][:] b=da.variables["b"][:] c=da.variables["c"][:] n=da.data_n nn=da.data_nn da.close() ''' da=nc.Dataset("data//lljwindrosedata") aaa=da.variables["a"][:] da.close() a=a0-aaa ''' aa=a.flatten() bb=(b[0:-1]+b[1:])/2 cc=(c[0:-1]+c[1:])/2 bbb=np.repeat(bb[np.newaxis,...],nn) ccc=np.zeros(nn*nn) for i in range(nn): ccc[nn*i:nn*i+nn]=cc[:] np.set_printoptions(threshold='nan') triang = tri.Triangulation(bbb*np.sin(ccc),bbb*np.cos(ccc)) plt.tricontourf(triang, aa,levels=np.arange(0,np.max(aa)*1.1,1000)) plt.colorbar() my_r=np.arange(0,50,10) for i in my_r: plt.plot(i*np.cos(ccc[0:n]),i*np.sin(ccc[0:n]),'r-') plt.plot([-70,70],[0,0],'r') plt.plot([0,0],[-70,70],'r') avg_wind=np.zeros(np.shape(cc)) i_cc=0 for i_angle in cc: avg_wind[i_cc]=np.sum(a[:,i_cc]*bb)/np.sum(a[:,i_cc]) i_cc=i_cc+1 new_avg_wind=np.zeros(np.shape(cc)[0]+1) new_cc=np.zeros(np.shape(cc)[0]+1) new_avg_wind[0:-1]=avg_wind new_cc[0:-1]=cc new_avg_wind[-1]=avg_wind[0] new_cc[-1]=cc[0] plt.plot(new_avg_wind*np.cos(new_cc),new_avg_wind*np.sin(new_cc),'w-') plt.title(plttitle) plt.gca().set_aspect('equal') plt.savefig("20160921//"+filename[6:-4]+".png", dpi=1000)#max dpi2300 def draw950type3(): filename="950hPa_type3LLJ_swLLJ" da=nc.Dataset("data//%s"%filename) u=da.variables["u"][:] v=da.variables["v"][:] z=da.variables["z"][:] avadata=np.where(u<10000) wind=np.sqrt(u**2+v**2) np.set_printoptions(threshold="nan") lon=da.variables["lon"][:] lat=da.variables["lat"][:] plt.figure() lon1=105 lon2=111 lat1=18.5 lat2=21 m = Basemap(projection='rotpole',o_lat_p=84,o_lon_p=00,lon_0=0,lat_0=0,lat_1=lat1,lat_2=lat2,lon_1=lon1+1,lon_2=lon2-1,llcrnrlat=lat1,urcrnrlat=lat2,llcrnrlon=lon1,urcrnrlon=lon2,resolution='h') m.drawcoastlines(color='#2e5244',linewidth=1) m.drawcountries(color='#2e5244',linewidth=1) m.drawparallels(np.arange(0.,90.,1),labels=[1,0,0,0]) m.drawmeridians(np.arange(0.,180.1),labels=[0,0,0,1]) plt.title("%s %s"%(filename[0:6],filename[-5:]),x=0.5,y=1.15,size='xx-large') x, y = m(lon,lat) print(np.min(wind[avadata])) print(np.max(wind[avadata])) csslev = np.arange(math.floor(np.min(z[avadata])),math.ceil(np.max(z[avadata])),10) css = m.contour(x,y,z,csslev,linewidths=0.8,colors='k') plt.clabel(css, inline=0,fontsize=10) cslev = np.arange(3,138,0.1) cs = m.contourf(x,y,wind,cslev,cmap=cm.coolwarm,vmax=14,vmin=8) #cslev = np.arange(0,11,0.1) #cs = m.contourf(x,y,wind,cslev,cmap=cm.coolwarm,vmax=7,vmin=2) cbar = m.colorbar(cs,location='bottom',pad="8%") cbar.set_label('wind speed (m/s)') vectorsize=10 rho=3 Q = m.quiver(x[::rho,::rho],y[::rho,::rho],u[::rho,::rho],v[::rho,::rho],width=vectorsize,headwidth=vectorsize*2/3,headlength=vectorsize/2,headaxislength=vectorsize/2,minlength=0,units='dots',angles='xy', scale_units='xy', scale=100,minshaft=0.5) qk = plt.quiverkey(Q, 0.1,1.1, 20, '20 m/s', labelpos='S') plt.figtext(0.1,0.1,'contour= %d to %d'%(math.floor(np.min(z[avadata])),math.ceil(np.max(z[avadata]))),fontsize=12) plt.savefig("20160921//pic_of_%s"%filename+".png", dpi=1000)#max dpi2300 #plt.show() def draw950type3_num(): filename="950hPa_type3LLJ_noLLJ" da=nc.Dataset("data//%s"%filename) u=da.variables["u"][:] v=da.variables["v"][:] z=da.variables["z"][:] num=da.variables["num"][:] avadata=np.where(u<10000) np.set_printoptions(threshold="nan") lon=da.variables["lon"][:] lat=da.variables["lat"][:] plt.figure() lon1=105 lon2=111 lat1=18.5 lat2=21 m = Basemap(projection='rotpole',o_lat_p=84,o_lon_p=00,lon_0=0,lat_0=0,lat_1=lat1,lat_2=lat2,lon_1=lon1+1,lon_2=lon2-1,llcrnrlat=lat1,urcrnrlat=lat2,llcrnrlon=lon1,urcrnrlon=lon2,resolution='h') m.drawcoastlines(color='#2e5244',linewidth=1) m.drawcountries(color='#2e5244',linewidth=1) m.drawparallels(np.arange(0.,90.,1),labels=[1,0,0,0]) m.drawmeridians(np.arange(0.,180.1),labels=[0,0,0,1]) plt.title("%s %s_num"%(filename[0:6],filename[-5:]),x=0.5,y=1.15,size='xx-large') x, y = m(lon,lat) csslev = np.arange(math.floor(np.min(z[avadata])),math.ceil(np.max(z[avadata])),10) css = m.contour(x,y,z,csslev,linewidths=0.8,colors='k') plt.clabel(css, inline=0,fontsize=10) cslev = np.arange(0,np.ceil(np.max(num))*1.1,np.ceil(np.max(num))/100) cs = m.contourf(x,y,num,cslev,cmap=cm.coolwarm) cbar = m.colorbar(cs,location='bottom',pad="8%") cbar.set_label('wind speed (m/s)') vectorsize=10 rho=3 Q = m.quiver(x[::rho,::rho],y[::rho,::rho],u[::rho,::rho],v[::rho,::rho],width=vectorsize,headwidth=vectorsize*2/3,headlength=vectorsize/2,headaxislength=vectorsize/2,minlength=0,units='dots',angles='xy', scale_units='xy', scale=100,minshaft=0.5) qk = plt.quiverkey(Q, 0.1,1.1, 20, '20 m/s', labelpos='S') plt.figtext(0.1,0.1,'contour= %d to %d'%(math.floor(np.min(z[avadata])),math.ceil(np.max(z[avadata]))),fontsize=12) plt.savefig("20160921//pic_of_%s_num"%filename+".png", dpi=1000)#max dpi2300 #plt.show() def draw950type1(): filename="950hPa_type1LLJ_swLLJ_June" da=nc.Dataset("data//%s"%filename) uu=da.variables["u"][:] vv=da.variables["v"][:] zz=da.variables["z"][:] lon=da.variables["lon"][:] lat=da.variables["lat"][:] da.close() lon1=105 lon2=111 lat1=18.5 lat2=21 for ihour in range(0,24): print('ihour=%d'%ihour) u=uu[ihour,:,:] v=vv[ihour,:,:] z=zz[ihour,:,:] wind=np.sqrt(u**2+v**2) avadata=np.where(np.all([u<10000,v<10000],0)) plt.figure() m=Basemap(projection='rotpole',o_lat_p=84,o_lon_p=00,lon_0=0,lat_0=0,lat_1=lat1,lat_2=lat2,lon_1=lon1+1,lon_2=lon2-1,llcrnrlat=lat1,urcrnrlat=lat2,llcrnrlon=lon1,urcrnrlon=lon2,resolution='c') m.drawcoastlines(color='#2e5244',linewidth=1) m.drawcountries(color='#2e5244',linewidth=1) m.drawparallels(np.arange(0.,90.,1),labels=[1,0,0,0]) m.drawmeridians(np.arange(0.,180.1),labels=[0,0,0,1]) plt.title("sw wind%d"%ihour,x=0.5,y=1.15,size='xx-large') x, y = m(lon,lat) print(np.min(wind[avadata])) print(np.max(wind[avadata])) ##--contour--## csslev = np.arange(400,650,20) css = m.contour(x,y,z[:,:],csslev,linewidths=0.8,colors='k') plt.clabel(css, inline=0,fontsize=10) ##--contourf--## cslev = np.arange(0,150,0.1) #cs = m.contourf(x,y,wind,cslev,cmap=cm.coolwarm,vmax=20,vmin=0) cs = m.contourf(x,y,wind,cmap=cm.coolwarm) cbar = m.colorbar(cs,location='bottom',pad="8%") cbar.set_label('wind speed (m/s)') vectorsize=10 rho=3 Q = m.quiver(x[::rho,::rho],y[::rho,::rho],u[::rho,::rho],v[::rho,::rho],width=vectorsize,headwidth=vectorsize*2/3,headlength=vectorsize/2,headaxislength=vectorsize/2,minlength=0,units='dots',angles='xy', scale_units='xy', scale=100,minshaft=0.5) qk = plt.quiverkey(Q, 0.1,1.1, 20, '20 m/s', labelpos='S') plt.figtext(0.1,0.1,'contour= %d to %d'%(math.floor(np.min(z[avadata])),math.ceil(np.max(z[avadata]))),fontsize=12) plt.savefig("20160921//hour//pic_of_%shour%d.png"%(filename,ihour), dpi=1000)#max dpi2300 plt.close() def draw950type1_num(): filename="950hPa_type1LLJ_swLLJ_June" da=nc.Dataset("data//%s"%filename) uu=da.variables["u"][:] vv=da.variables["v"][:] zz=da.variables["z"][:] numm=da.variables["num"][:] lon=da.variables["lon"][:] lat=da.variables["lat"][:] da.close() for ihour in range(0,24): print('ihour=%d'%ihour) u=uu[ihour,:,:] v=vv[ihour,:,:] z=zz[ihour,:,:] num=numm[ihour,:,:] wind=np.sqrt(u**2+v**2) avadata=np.where(u<10000) plt.figure() lon1=105 lon2=111 lat1=18.5 lat2=21 m = Basemap(projection='rotpole',o_lat_p=84,o_lon_p=00,lon_0=0,lat_0=0,lat_1=lat1,lat_2=lat2,lon_1=lon1+1,lon_2=lon2-1,llcrnrlat=lat1,urcrnrlat=lat2,llcrnrlon=lon1,urcrnrlon=lon2,resolution='c') m.drawcoastlines(color='#2e5244',linewidth=1) m.drawcountries(color='#2e5244',linewidth=1) m.drawparallels(np.arange(0.,90.,1),labels=[1,0,0,0]) m.drawmeridians(np.arange(0.,180.1),labels=[0,0,0,1]) plt.title("swLLJ_num%d"%ihour,x=0.5,y=1.15,size='xx-large') x, y = m(lon,lat) ##--contour--## csslev = np.arange(400,650,20) css = m.contour(x,y,z,csslev,linewidths=0.8,colors='k') plt.clabel(css, inline=0,fontsize=10) ##--contourf--## cslev = np.arange(0,90,0.1) cs = m.contourf(x,y,num,cslev,cmap=cm.coolwarm) cbar = m.colorbar(cs,location='bottom',pad="8%") cbar.set_label('wind speed (m/s)') vectorsize=10 rho=3 Q = m.quiver(x[::rho,::rho],y[::rho,::rho],u[::rho,::rho],v[::rho,::rho],width=vectorsize,headwidth=vectorsize*2/3,headlength=vectorsize/2,headaxislength=vectorsize/2,minlength=0,units='dots',angles='xy', scale_units='xy', scale=100,minshaft=0.5) qk = plt.quiverkey(Q, 0.1,1.1, 20, '20 m/s', labelpos='S') plt.figtext(0.1,0.1,'contour= %d to %d'%(math.floor(np.min(z[avadata])),math.ceil(np.max(z[avadata]))),fontsize=12) plt.savefig("20160921//hour//pic_of_%shour%d_num"%(filename,ihour)+".png", dpi=1000)#max dpi2300 plt.close() def hour24windrose(): filename="950hPa_type1LLJ_swLLJ_June" da=nc.Dataset("data//%s"%filename) uu=da.variables["u"][:] vv=da.variables["v"][:] da.close() uavg=np.zeros(24) vavg=np.zeros(24) for ihour in range(0,24): u=uu[ihour,:,:] v=vv[ihour,:,:] avail=np.where(np.all([u<10000,v<10000],0)) uavg[ihour]=np.mean(u[avail]) vavg[ihour]=np.mean(v[avail]) del(avail) fig, ax = plt.subplots() plt.axes(polar=True) ang=np.angle(uavg+vavg*1j) val=np.sqrt(uavg**2+vavg**2) plt.plot(ang,val,'o-') for ihour in range(0,24): plt.text(ang[ihour],val[ihour],"%d"%ihour) ax.plot([ang[23],ang[0]],[val[23],val[0]],'b-') ''' plt.plot(uavg,vavg,'o-') for ihour in range(0,24): ax.text(uavg[ihour],vavg[ihour],"%d(%d)"%(ihour,np.angle(uavg[ihour]+vavg[ihour]*1j,deg=True))) ax.plot([uavg[23],uavg[0]],[vavg[23],vavg[0]],'b-') ''' plt.title(filename) plt.savefig("20160921//hour//hour24windrose_June.png", dpi=100) hour24windrose() ''' plt.figure(figsize=(8, 6)) gs = gridspec.GridSpec(2, 2, width_ratios=[3, 1],height_ratios=[1,1]) plt.subplot(gs[2]) plt.show() '''
相关文章推荐
- 利用 Python 做简单的代码生成
- 利用python处理xml -- 中文编码问题
- Python利用win32com操作Excel
- 利用python对rrd进行resize
- Python利用ConfigParser读取配置文件
- 利用闭包把Python函数当类使
- 利用python操作access,sql server数据库
- python 利用win32com操作excel
- 利用GDAL-python库为SHP格式添加Z值
- 利用 Python 做批量文件操作的任务
- 在漏洞利用Python代码真的很爽
- 【用Python写爬虫】获取html的方法【五】:利用Twisted框架之client.getPage
- 利用python特性进行提权
- 在Python下利用PIL实现可设定阈值的二值图像转换
- 利用 Python 做批量文件操作的任务
- 利用抽象语法树检查Python中“未定义”的变量名
- 在漏洞利用Python代码真的很爽
- 学习Python可以利用的电子资源
- Python利用difflib比较字符串
- 如何利用python dbus来发送一个信号