python發送excel文件_Python操作Excel, 開發和調用接口,發送郵件

接口開發:

importflaskimporttoolsimportjson,redisimportrandom

server= flask.Flask(__name__)#新建一個服務,把當前這個python文件當做一個服務

ip= '118.24.3.40'password='HK139bc&*'r= redis.Redis(host=ip,password=password,port=6379,db=10,

decode_responses=True)#連接redis

#登錄接口

@server.route('/login',methods=['get'])defhello():

uname= flask.request.values.get('username')

pd= flask.request.values.get('passwd')#sql = 'select * from app_myuser where username="%s"'%uname

#res = tools.my_db(sql)

key='nhy:%s'%uname

res=r.get(key)ifres:

res=json.loads(res)if tools.my_md5(pd) == res.get('passwd'):

res= {"code":0,"msg":"登錄成功!"}else:

res= {"code":1,"msg":"密碼錯誤!"}else:

res= {'code':2,"msg":"用戶不存在"}return json.dumps(res,ensure_ascii=False,indent=4)#注冊接口

@server.route('/reg',methods=['post'])defreg():

uname= flask.request.values.get('username')

pd= flask.request.values.get('passwd')

cpd= flask.request.values.get('cpwd')

key='nhy:%s'%uname

res=r.get(key)ifres:

res= {'code': 2, "msg": "用戶已存在"}else:

md5_password=tools.my_md5(pd)

res= {'id':random.randint(100,9999),'username':uname,'passwd':md5_password,'is_admin':1}

r.set('nhy:%s'%uname,json.dumps(res))# res = {"code":0,"msg":"注冊成功!"}return json.dumps(res,ensure_ascii=False,indent=4)#查詢信息接口

@server.route('/api/stu')defget_stu():

username= flask.request.values.get('name')#默認get不到的話,返回的值就是None

age = flask.request.values.get('age')if username andage:

sql= "select * from app_student where name='%s' and age='%s'" %(username, age)elif not username andage:

sql= "select * from app_student where age='%s'" %ageelif username and notage:

sql= "select * from app_student where name='%s'" %usernameelse:

sql= "select * from app_student"res=tools.my_db2(sql)return json.dumps(res,ensure_ascii=False,indent=4)

server.run(host='0.0.0.0',port=8999,debug=True)#ip:8000/login#127.0.0.1

牛刀小試:

1. 傳入一個數據庫中的表名,然后把表里的數據導出到excel里面

寫excel xlwt

連接數據庫 pymysql

思路:

1、連接上數據庫,寫好 sql ='select * from %s;'%table_name

2、獲取到數據 [[id name passwd is_admin] [1,nhy,xdfsdfsd,1],[2,nhy2,xdfsdfsd,1] ]

3、循環寫入excel

4、寫表頭 hhh

importpymysql,xlwt

conn= pymysql.connect(host='118.24.3.40',user='jxz',password='123456',db='jxz')

cur=conn.cursor()

table_name= input('請輸入你要導出的表名:').strip()

cur.execute('select * from %s;'%table_name)

res=list(cur.fetchall())

fields= [ field[0] for field incur.description ]#cur.description獲取到表結構

res.insert(0,fields)

book=xlwt.Workbook()

sheet= book.add_sheet('sheet1')for index,value inenumerate(res):for index2,v2 inenumerate(value):

sheet.write(index,index2,v2)

book.save('%s.xls'%table_name)

cur.close()

conn.close()

2. 獲取到數據庫里面的數據

{'username':'lyl','password':xxx,'id':111,'addr':'xxx'}

然后存到redis里面

set(lyl,{'username':'lyl','password':xxx,'id':111,'addr':'xxx'})

get(key)

importpymysql,redis,json

conn= pymysql.connect(host='118.24.3.40',user='jxz',password='123456',db='jxz')

cur=conn.cursor(pymysql.cursors.DictCursor)

cur.execute('select * from app_myuser;')

data=cur.fetchall()

cur.close()

conn.close()

ip= '118.24.3.40'password='HK139bc&*'r= redis.Redis(host=ip,password=password,port=6379,db=10,

decode_responses=True)#連接redis

for d indata:#{'username':'lyl','password':xxx,'id':111,'addr':'xxx'}

key = 'nhy:%s'%d.get("username")

r.set(key,json.dumps(d))

fw = open('a.txt','w',encoding='utf-8')

fw.write('時代峰峻圣誕節瘋狂樓上的房間考慮到雙方就上課了的房間開連鎖店是的范德薩')

fw = open('b.txt','w',encoding='gbk')

fw.write('時代峰峻圣誕節瘋狂樓上的房間考慮到雙方就上課了的房間開連鎖店是的范德薩')

import chardet

f= open('b.txt','rb')

res = f.read()

print(chardet.detect(res))

print(res.decode('gbk'))

python utf-8 gbk GB2312字符集

1121 牛

發送郵件:需要安裝,pip install yagmail

importyagmail

username='uitestp4p@163.com'password='houyafan123'#生成授權碼,qq、163、126都是授權碼

mail_server= 'smtp.163.com'

#mail_server = 'smtp.qq.com'#mail_server = 'smtp.126.com'

m= yagmail.SMTP(user=username,password=password,host=mail_server)#smtp_ssl=True,如果郵箱使用了安全協議,就需要加這個

#qq郵箱就是使用了安全協議

to= ['1137944722@qq.com','wangmei416516@163.com','511402865@qq.com']

cc= ['61378317@qq.com','1196842722@qq.com','1365834704@qq.com']

m.send(to=to,cc=cc,subject='今天吃了嗎',

contents='今天吃魚肉了嗎,吃飽沒',

attachments=r'tools.py')

發送網絡請求:

1. 用標準庫:

from urllib.request import urlopen #python自帶的,不好用,只需了解。urllib可以發送網絡請求,urlopen可以發送接口請求

from urllib.parse import urlencode #用于post接口請求,urlencode可以把json字符串轉化成k=v形式

#評語:這個模塊要求類型,二進制換來換去,很麻煩。

#功能:get url request

url='http://127.0.0.1:8999/api/login?username=testuser1&passwd=111111'res= urlopen(url) #發送接口請求

print(res.read().decode()) #read獲取請求返回內容,但返回二進制數據,所以再decode一下。

#功能:post url request

url='http://127.0.0.1:8999/api/login'data= {'username':'testuser1','passwd':'111111'}

s= urlencode(data) #把字典變成k=v形式,username=testuser1,passwd=111111#注:‘username=testuser1,passwd=111111’,是個字符串,encode()后,變為b'username=testuser1,passwd=111111'

res = urlopen(url,s.encode()) #post請求,第二個參數要求是二進制類型,所以再encode一下

print(res.read().decode())

2. pip install requests

importrequestsimportrandom

url='http://127.0.0.1:8999/api/upload'data= {'username':'testuser1','passwd':'111111'}

r= requests.get(url,params=data) #發get請求

r = requests.post(url,data=data) #發post請求

data={"session_id":"6ab8785039dcf50fb11c53acc1db7648","name":"zhouyongbo%s"%random.randint(1,99),"phone":"111211345%02d"%random.randint(1,99),"grade":"天秤座"}

r= requests.post(url,json=data) #入參是json類型的

#上傳文件的

r =requests.post(url,

data={'session_id':'6ab8785039dcf50fb11c53acc1db7648'},

files={'file_name':open('account.xls','rb') }

)#添加header

requests.get(url,headers={'cookie':'pt2gguin=o0511402865; RK=JQZpwBp1by; ptcz=6c30e26a9ed6be93d3de9e4c4aca3e55650cf99fcffa64729bd1d58a5fb209d9; pgv_pvi=779236352; pgv_pvid=6970909788; qb_qua=; qb_guid=818de686e29d412fa4ee9e99905ea166; Q-H5-GUID=818de686e29d412fa4ee9e99905ea166; NetType=; pgv_si=s4499960832; FTN5K=0138ca95; pgv_info=ssid=s4269564370; luin=o0511402865; uin=o0511402865; lskey=00010000efc2701412d3429029ac9366e4ba98f0e978e0ae4a9c684101a7b22df0695f534bc242c8d4ff386d; skey=@0sHtvhTsD; ptisp=cnc; p_uin=o0511402865; pt4_token=wGU2YAaM0uu7LbcNjuDcLN-TPrEy7AZw4gcL5TEcKxw_; p_skey=1zg7yvF5wr6l43mfr-BvNHxuVDtybKpR5RbCrgC8weQ_'})

requests.get(url,cookies={'pt2ggui':'o0511402865','RK':'JQZpwBp1by'})print(r.text) #結果返回的就是字符串

print(r.json()) #結果返回的就是字典,必須返回的是json,才能轉成字典

#下載文件

url='https://q4.qlogo.cn/g?b=qq&nk=1834364415&s=140'url='https://qiniuuwmp3.changba.com/1127063572.mp4'r=requests.get(url)#返回的就是二進制的

r.cookies #返回cookie

r.status_code #返回的狀態碼200

r.content #可以返回圖片、音樂等

f= open('sdfsdf.mp4','wb')

f.write(r.content)

f.close()

接口返回值處理:

json_dic=res.json()  #返回為json格式,直接轉成字典

str=res.text      #返回為字符串

file_content=res.content  #二進制,下載圖片、文件時用,可以直接新建文件再保存內容:with open('a.jpg','wb')as f: f.write(r.content)

r.cookies        #請求返回的cookie

r.status_code     #狀態碼

寫日志: pip install nnlog

importnnlog

nnlog.Logger.words='哈哈哈哈'log= nnlog.Logger('book_server.log','warn',when='S',backCount=5) #默認debug級別,自動清理日志,5條就刪除#debug 打印一些調試信息,非常多#info 打印走到哪兒了#warning#error#這一個語句,可以放在需要的地方,比如登錄是,將誰在登錄寫入日志

log.debug('xxx值是什么')

log.info('調用了什么xxx')

log.warning('xx警告!')

log.error('xxx出錯!')

代碼文件:

tools.pyimporttimeimportosdef timestampToStr(timestamp=None,format='%Y-%m-%d %H:%M:%S'):#時間戳轉格式化好的時間

iftimestamp:

time1=time.localtime(timestamp)

res=time.strftime(format, time1)else:

res=time.strftime(format)returnres#20180304153958

def strTotimestamp(str=None,format='%Y%m%d%H%M%S'):#格式化的時間轉時間戳

ifstr:

timep=time.strptime(str, format)

res=time.mktime(timep)else:

res=time.time()returnint(res)def clean_log(path,day=3):print('調用了')for cur_path, dirs, files inos.walk(path):for file infiles:if file.endswith('log'):

f_time= file.split('.')[0].split('_')[-1]

file_timestamp= strTotimestamp(f_time,'%Y-%m-%d')

cur_timestamp= strTotimestamp(time.strftime('%Y-%m-%d'),'%Y-%m-%d')if (cur_timestamp - file_timestamp) >= 60*60*24*day:#判斷文件的時間是否大于3天

os.remove(os.path.join(cur_path,file))importpymysqldefmy_db(sql):

conn= pymysql.connect(host='118.24.3.40',user='jxz',password='123456',

db='jxz',port=3306,charset='utf8',autocommit=True)

cur=conn.cursor(pymysql.cursors.DictCursor)

cur.execute(sql)

res= cur.fetchone() #{'username':'nhy'} {}

cur.close()

conn.close()returnresdefmy_db2(sql):

conn= pymysql.connect(host='118.24.3.40',user='jxz',password='123456',

db='jxz',port=3306,charset='utf8',autocommit=True)

cur=conn.cursor(pymysql.cursors.DictCursor)

cur.execute(sql)

res= cur.fetchall() #{'username':'nhy'} {}

cur.close()

conn.close()returnresimporthashlibdef my_md5(s,salt=''):

s= s+salt

news=str(s).encode()

m=hashlib.md5(news)returnm.hexdigest()if __name__ == '__main__':#判斷如果是在別的文件里面導入這個python文件的話,就不執行下面的代碼

print(strTotimestamp())print(clean_log('.'))print(clean_log('.',2))

一個python項目的文件結構:

1528135-20181223232805277-1036408107.png

book_server/: 項目名

conf/:存放配置文件

data/:存放sql文件

lib/: 存放項目的所有源代碼。

logs/:存放日志文件

uploads/:存放下載的文件

start.py: 程序啟動腳本

readme.txt: 項目說明文件。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/538585.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/538585.shtml
英文地址,請注明出處:http://en.pswp.cn/news/538585.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

第一個Spark實例:求PI值

向spark提交jar&#xff0c;需要使用 bin下的spark-submit [hadoopnbdo1 bin]$ ./spark-submit --help Usage: spark-submit [options] <app jar | python file> [app arguments] Usage: spark-submit --kill [submission ID] --master [spark://...] Usage: spark-submi…

go conn 讀取byte數組后是否要_【技術推薦】正向角度看Go逆向

Go語言具有開發效率高&#xff0c;運行速度快&#xff0c;跨平臺等優點&#xff0c;因此正越來越多的被攻擊者所使用&#xff0c;其生成的是可直接運行的二進制文件&#xff0c;因此對它的分析類似于普通C語言可執行文件分析&#xff0c;但是又有所不同&#xff0c;本文將會使用…

Confluence 6 選擇一個外部數據庫

2019獨角獸企業重金招聘Python工程師標準>>> 注意&#xff1a; 選擇一個合適的數據庫通常需要花費很多時間。同時 Confluence 自帶的 XML 數據備份和恢復功能通常也不適合合并和備份有大量數據的數據庫。如果你想在系統運行后進行數據合并&#xff0c;你通常需要使用…

spark中saveAsTextFile如何最終生成一個文件

原文地址&#xff1a;http://www.cnblogs.com/029zz010buct/p/4685173.html ----------------------------------------------------------------------- 一般而言&#xff0c;saveAsTextFile會按照執行task的多少生成多少個文件&#xff0c;比如part-00000一直到part-0000n&…

python爬取內容亂碼_python爬取html中文亂碼

環境&#xff1a; python3.6 爬取代碼&#xff1a; import requests url https://www.dygod.net/html/tv/hytv/ req requests.get(url) print(req.text) 爬取結果&#xff1a; / _-如上&#xff0c;title內容出現亂碼&#xff0c;自己感覺應該是編碼的問題&#xff0c;但是不…

前端每日實戰:34# 視頻演示如何用純 CSS 創作在文本前后穿梭的邊框

效果預覽 按下右側的“點擊預覽”按鈕可以在當前頁面預覽&#xff0c;點擊鏈接可以全屏預覽。 https://codepen.io/comehope/pen/qYepNv 可交互視頻教程 此視頻是可以交互的&#xff0c;你可以隨時暫停視頻&#xff0c;編輯視頻中的代碼。 請用 chrome, safari, edge 打開觀看。…

not support mysql_MYSQL出現quot; Client does not support authentication quot;的解決方法

MYSQL 幫助&#xff1a;A.2.3 Client does not support authentication protocolMySQL 4.1 and up uses an authentication protocol based on a password hashing algorithm that is incompatible with that used by older clients. If you upgrade the server to 4.1, attemp…

spark shell中編寫WordCount程序

啟動hdfs 略http://blog.csdn.net/zengmingen/article/details/53006541 啟動spark 略安裝&#xff1a;http://blog.csdn.net/zengmingen/article/details/72123717 spark-shell&#xff1a;http://blog.csdn.net/zengmingen/article/details/72162821準備數據 vi wordcount.t…

初級英語02

做客 1 Diana,i havent seen you for ages,how have you been? 2 would you like something to drink? 3 give my best to your parents. 4 did you hear what happened?whats the matter with him? 5 id like to applogize for leaving so early,i brought a little gift,…

mysql計算機二級選擇題題庫_全國計算機二級mysql數據庫選擇題及答案

全國計算機二級mysql數據庫選擇題及答案選擇題是全國計算機二級mysql考試里的送分題&#xff0c;下面小編為大家帶來了全國計算機二級mysql數據庫選擇題及答案&#xff0c;歡迎大家閱讀&#xff01;全國計算機二級mysql數據庫選擇題及答案1) 函數 max( ) 表明這是一個什么函數?…

git add 撤銷_更科學地管理你的項目,Git 簡明教程(二)

修改文件內容上回說到&#xff0c;我們已經成功創建并提交了一個 README.md 文件到 FirstGit 版本庫中1、修改文件現在我們更改 README.md 內容2、查看版本庫狀態該文件夾內右鍵運行 Git Bash Here執行命令 git statusGit 提示我們的改動還沒有 commit&#xff0c;并且它給出了…

Eclipse中Copy Qualified Name復制類全名解決辦法

原文鏈接&#xff1a;http://www.cnblogs.com/zyh1994/p/6393550.html ----------------------------------------------------------------------------------------------- Eclipse中 用Copy Qualified Name復制類全名時 總是這樣的/struts1/src/me/edu/HelloAction.java很不…

c 連接mysql錯誤信息_使用C語言訪問MySQL數據 —— 連接和錯誤處理

2011-05-09 wcdj可以通過許多不同的編程語言來訪問MySQL&#xff0c;例如&#xff0c;C&#xff0c;C&#xff0c;Java&#xff0c;Perl&#xff0c;Python&#xff0c;Tcl&#xff0c;PHP等。本文主要總結使用C語言接口如何訪問MySQL數據。(一) 連接例程(二) 錯誤處理(一) 連接…

eclipse編寫wordcount提交spark運行

采用集成了scala的eclipse編寫代碼 代碼&#xff1a; package wordcountimport org.apache.spark.SparkConf import org.apache.spark.SparkContextobject WordCount {def main(args: Array[String]): Unit {//非常重要&#xff0c;是通向Spark集群的入口val confnew SparkCon…

gitlab 刪除分支_如何刪除gitlab上默認受保護的master主分支

今天開發在檢查代碼的時候&#xff0c;發現master分支有問題&#xff0c;現在準備刪除此主分支&#xff0c;并且重新提交正確的代碼&#xff0c;不過在刪除時發現&#xff0c;master分支不能被刪除。ps&#xff1a;主分支一般都是線上分支&#xff0c;需要開發確認后并且做好備…

rsync服務擴展應用

rsync服務擴展應用① 守護進程多模塊功能配置第一步&#xff1a;修改配置文件 注&#xff1a;可以再vim中輸入&#xff1a;20,22copy22&#xff0c;表示復制20到22行到22行之后 vim /etc/rsyncd.conf[backup01]comment "backup dir by oldboy"path /backup[backup0…

NodeJs 安裝

進入官網下載&#xff0c;zip 安裝包 https://nodejs.org/en/download/ 解壓 配置環境變量到安裝目錄 cmd 測試 node -v npm -v

SSH秘鑰登錄服務器

一、查看本機 ssh 公鑰&#xff0c;生成公鑰 1.通過命令窗口 a. 打開你的 git bash 窗口 b. 進入 .ssh 目錄&#xff1a;cd ~/.ssh c. 找到 id_rsa.pub 文件&#xff1a;ls d. 查看公鑰&#xff1a;cat id_rsa.pub 或者 vim id_rsa.pub git–查看本機 ssh 公鑰&#xff0c…

mysql存入mtr數據_mysql mtr寫入數據

selenium 打開瀏覽器import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebE ...Win8&period;1安裝Visual Studio 2015提示需要KB2919355http://www.microsoft.com/zh-cn/download/details.aspx?id42335 安裝說明: 1.若要…

diff git 代碼實現_Git 自救指南:這些坑你都跳得出嗎?

每天都會寫架構師文章&#xff0c;Java技術文章天天更新&#xff0c;感興趣的點個關注再走唄&#xff01;Git 雖然因其分布式管理方式&#xff0c;不完全依賴網絡&#xff0c;良好的分支策略&#xff0c;容易部署等優點&#xff0c;已經成為最受歡迎的源代碼管理方式。但是一分…