python傳文件-ag真人国际官网
❶ python mac 瀏覽器傳文件
selenium提供的sendkeys方法上傳文件我就不贅述,網上很多教程,但是缺點也很明顯並不是完全適用各種場景如果上傳文件不是input類型,就完全無法適用就算是input也不能完全適用亦沒辦法完全模擬用戶的操作。
在執行當前輸入路徑地址的時候,必須切換為英文輸入法,否則會導致輸入地址後無法跳轉需要注意在mac上必須打開安全性與隱私中的輔助功能完全控制。
python由荷蘭數學和計算機科學研究學會的吉多·范羅蘇姆於1990年代初設計,作為一門叫做abc語言的替代品python提供了高效的高級數據結構,還能簡單有效地面向對象編程。
❷ 如何使用python在區域網上傳送文件
瀏覽器輸入框輸入文件所在主機 ip 。
轉自:http://news.tuxi.com.cn/kf/article/jhtdj.htm
本文實例講述了python實現支持目錄ftp上傳下載文件的方法。分享給大家供大家參考。具體如下:
該程序支持ftp上傳下載文件和目錄、適用於windows和linux平台。
#!/usr/bin/envpython
#-*-coding:utf-8-*-
importftplib
importos
importsys
classftpsync(object):
conn=ftplib.ftp()
def__init__(self,host,port=21):
self.conn.connect(host,port)
deflogin(self,username,password):
self.conn.login(username,password)
self.conn.set_pasv(false)
printself.conn.welcome
deftest(self,ftp_path):
printftp_path
printself._is_ftp_dir(ftp_path)
#printself.conn.nlst(ftp_path)
#self.conn.retrlines('list./a/b')
#ftp_parent_path=os.path.dirname(ftp_path)
#ftp_dir_name=os.path.basename(ftp_path)
#printftp_parent_path
#printftp_dir_name
def_is_ftp_file(self,ftp_path):
try:
ifftp_pathinself.conn.nlst(os.path.dirname(ftp_path)):
returntrue
else:
returnfalse
exceptftplib.error_perm,e:
returnfalse
def_ftp_list(self,line):
list=line.split('')
ifself.ftp_dir_name==list[-1]andlist[0].startswith('d'):
self._is_dir=true
def_is_ftp_dir(self,ftp_path):
ftp_path=ftp_path.rstrip('/')
ftp_parent_path=os.path.dirname(ftp_path)
self.ftp_dir_name=os.path.basename(ftp_path)
self._is_dir=false
ifftp_path=='.'orftp_path=='./'orftp_path=='':
self._is_dir=true
else:
#thisuescallbackfunction,thatwillchange_is_dirvalue
try:
self.conn.retrlines('list%s'%ftp_parent_path,self._ftp_list)
exceptftplib.error_perm,e:
returnself._is_dir
returnself._is_dir
defget_file(self,ftp_path,local_path='.'):
ftp_path=ftp_path.rstrip('/')
ifself._is_ftp_file(ftp_path):
file_name=os.path.basename(ftp_path)
#如果本地路徑是目錄,下載文件到該目錄
ifos.path.isdir(local_path):
file_handler=open(os.path.join(local_path,file_name),'wb')
self.conn.retrbinary("retr%s"%(ftp_path),file_handler.write)
file_handler.close()
#如果本地路徑不是目錄,但上層目錄存在,則按照本地路徑的文件名作為下載的文件名稱
elifos.path.isdir(os.path.dirname(local_path)):
file_handler=open(local_path,'wb')
self.conn.retrbinary("retr%s"%(ftp_path),file_handler.write)
file_handler.close()
#如果本地路徑不是目錄,且上層目錄不存在,則退出
else:
print'eroor:thedir:%sisnotexist'%os.path.dirname(local_path)
else:
print'eroor:theftpfile:%sisnotexist'%ftp_path
defput_file(self,local_path,ftp_path='.'):
ftp_path=ftp_path.rstrip('/')
ifos.path.isfile(local_path):
file_handler=open(local_path,"r")
local_file_name=os.path.basename(local_path)
#如果遠程路徑是個目錄,則上傳文件到這個目錄,文件名不變
ifself._is_ftp_dir(ftp_path):
self.conn.storbinary('stor%s'%os.path.join(ftp_path,local_file_name),file_handler)
#如果遠程路徑的上層是個目錄,則上傳文件,文件名按照給定命名
elifself._is_ftp_dir(os.path.dirname(ftp_path)):
print'stor%s'%ftp_path
self.conn.storbinary('stor%s'%ftp_path,file_handler)
#如果遠程路徑不是目錄,且上一層的目錄也不存在,則提示給定遠程路徑錯誤
else:
print'eroor:theftppath:%siserror'%ftp_path
file_handler.close()
else:
print'error:thefile:%sisnotexist'%local_path
defget_dir(self,ftp_path,local_path='.',begin=true):
ftp_path=ftp_path.rstrip('/')
#當ftp目錄存在時下載
ifself._is_ftp_dir(ftp_path):
#如果下載到本地當前目錄下,並創建目錄
#下載初始化:如果給定的本地路徑不存在需要創建,同時將ftp的目錄存放在給定的本地目錄下。
#ftp目錄下文件存放的路徑為local_path=local_path os.path.basename(ftp_path)
#例如:將ftp文件夾a下載到本地的a/b目錄下,則ftp的a目錄下的文件將下載到本地的a/b/a目錄下
ifbegin:
ifnotos.path.isdir(local_path):
os.makedirs(local_path)
local_path=os.path.join(local_path,os.path.basename(ftp_path))
#如果本地目錄不存在,則創建目錄
ifnotos.path.isdir(local_path):
os.makedirs(local_path)
#進入ftp目錄,開始遞歸查詢
self.conn.cwd(ftp_path)
ftp_files=self.conn.nlst()
forfileinftp_files:
local_file=os.path.join(local_path,file)
#如果fileftp路徑是目錄則遞歸上傳目錄(不需要再進行初始化begin的標志修改為false)
#如果fileftp路徑是文件則直接上傳文件
ifself._is_ftp_dir(file):
self.get_dir(file,local_file,false)
else:
self.get_file(file,local_file)
#如果當前ftp目錄文件已經遍歷完畢返回上一層目錄
self.conn.cwd("..")
return
else:
print'error:thedir:%sisnotexist'%ftp_path
return
defput_dir(self,local_path,ftp_path='.',begin=true):
ftp_path=ftp_path.rstrip('/')
#當本地目錄存在時上傳
ifos.path.isdir(local_path):
#上傳初始化:如果給定的ftp路徑不存在需要創建,同時將本地的目錄存放在給定的ftp目錄下。
#本地目錄下文件存放的路徑為ftp_path=ftp_path os.path.basename(local_path)
#例如:將本地文件夾a上傳到ftp的a/b目錄下,則本地a目錄下的文件將上傳的ftp的a/b/a目錄下
ifbegin:
ifnotself._is_ftp_dir(ftp_path):
self.conn.mkd(ftp_path)
ftp_path=os.path.join(ftp_path,os.path.basename(local_path))
#如果ftp路徑不是目錄,則創建目錄
ifnotself._is_ftp_dir(ftp_path):
self.conn.mkd(ftp_path)
#進入本地目錄,開始遞歸查詢
os.chdir(local_path)
local_files=os.listdir('.')
forfileinlocal_files:
#如果file本地路徑是目錄則遞歸上傳目錄(不需要再進行初始化begin的標志修改為false)
#如果file本地路徑是文件則直接上傳文件
ifos.path.isdir(file):
ftp_path=os.path.join(ftp_path,file)
self.put_dir(file,ftp_path,false)
else:
self.put_file(file,ftp_path)
#如果當前本地目錄文件已經遍歷完畢返回上一層目錄
os.chdir("..")
else:
print'error:thedir:%sisnotexist'%local_path
return
if__name__=='__main__':
ftp=ftpsync('192.168.1.110')
ftp.login('test','test')
#上傳文件,不重命名
#ftp.put_file('111.txt','a/b')
#上傳文件,重命名
#ftp.put_file('111.txt','a/112.txt')
#下載文件,不重命名
#ftp.get_file('/a/111.txt',r'd:\')
#下載文件,重命名
#ftp.get_file('/a/111.txt',r'd:112.txt')
#下載到已經存在的文件夾
#ftp.get_dir('a/b/c',r'd:\a')
#下載到不存在的文件夾
#ftp.get_dir('a/b/c',r'd:\aa')
#上傳到已經存在的文件夾
ftp.put_dir('b','a')
#上傳到不存在的文件夾
ftp.put_dir('b','aa/b/')
希望本文所述對大家的python程序設計有所幫助。
以下轉自:http://blog.csdn.net/linda1000/article/details/8255771
python中的ftplib模塊
python中默認安裝的ftplib模塊定義了ftp類,其中函數有限,可用來實現簡單的ftp客戶端,用於上傳或下載文件
ftp的工作流程及基本操作可參考協議rfc959
ftp登陸連接
from ftplib import ftp #載入ftp模塊
ftp=ftp() #設置變數
ftp.set_debuglevel(2) #打開調試級別2,顯示詳細信息
ftp.connect("ip","port") #連接的ftp sever和埠
ftp.login("user","password")#連接的用戶名,密碼
print ftp.getwelcome() #列印出歡迎信息
ftp.cmd("xxx/xxx") #更改遠程目錄
bufsize=1024 #設置的緩沖區大小
filename="filename.txt" #需要下載的文件
file_handle=open(filename,"wb").write #以寫模式在本地打開文件
ftp.retrbinaly("retr filename.txt",file_handle,bufsize) #接收伺服器上文件並寫入本地文件
ftp.set_debuglevel(0) #關閉調試模式
ftp.quit #退出ftp
ftp相關命令操作
ftp.cwd(pathname) #設置ftp當前操作的路徑
ftp.dir() #顯示目錄下文件信息
ftp.nlst() #獲取目錄下的文件
ftp.mkd(pathname) #新建遠程目錄
ftp.pwd() #返回當前所在位置
ftp.rmd(dirname) #刪除遠程目錄
ftp.delete(filename) #刪除遠程文件
ftp.rename(fromname, toname)#將fromname修改名稱為toname。
ftp.storbinaly("stor filename.txt",file_handel,bufsize) #上傳目標文件
ftp.retrbinary("retr filename.txt",file_handel,bufsize)#下載ftp文件
網上找到一個具體的例子:
#例:ftp編程
fromftplibimportftp
ftp=ftp()
timeout=30
port=21
ftp.connect('192.168.1.188',port,timeout)#連接ftp伺服器
ftp.login('username','888888')#登錄
printftp.getwelcome()#獲得歡迎信息
ftp.cwd('file/test')#設置ftp路徑
list=ftp.nlst()#獲得目錄列表
fornameinlist:
print(name)#列印文件名字
path='d:/data/' name#文件保存路徑
f=open(path,'wb')#打開要保存文件
filename='retr' name#保存ftp文件
ftp.retrbinary(filename,f.write)#保存ftp上的文件
ftp.delete(name)#刪除ftp文件
ftp.storbinary('stor' filename,open(path,'rb'))#上傳ftp文件
ftp.quit()#退出ftp伺服器
完整的模板:
#!/usr/bin/python
#-*-coding:utf-8-*-
importftplib
importos
importsocket
host='ftp.mozilla.org'
dirn='pub/mozilla.org/webtools'
file='bugzilla-3.6.7.tar.gz'
defmain():
try:
f=ftplib.ftp(host)
except(socket.error,socket.gaierror):
print'error:cannotreach"%s"'%host
return
print'***connectedtohost"%s"'%host
try:
f.login()
exceptftplib.error_perm:
print'error:cannotloginanonymously'
f.quit()
return
print'***loggedinas"anonymously"'
try:
f.cwd(dirn)
exceptftplib.error_perm:
print'errorlcannotcdto"%s"'%dirn
f.quit()
return
print'***changedto"%s"folder'%dirn
try:
#傳一個回調函數給retrbinary()它在每接收一個二進制數據時都會被調用
f.retrbinary('retr%s'%file,open(file,'wb').write)
exceptftplib.error_perm:
print'error:cannotreadfile"%s"'%file
os.unlink(file)
else:
print'***downloaded"%s"tocwd'%file
f.quit()
return
if__name__=='__main__':
main()
❹ 如何通過python上傳文件到百度雲盤
直接在系統命令行中輸入bypy命令,將會列出所有的命令的使用信息。
授權
在命令行中輸入bypy info,將會出現一個提示,按照提示完成授權,完成了授權python代碼才能和你的網路雲盤進行通信。
常用命令
新建文件夾,在網路網盤中新建一個文件夾:
mkdir(remotepath='bypy'),將會新建一個bypy文件夾,如圖:
新建的文件夾
上傳文件:
upload(localpath='c:\\new\\timg.jpg',remotepath='bypy',onp='new')
參數說明:
localpath:本地的目錄,如果省略則為當前目錄。
remotepath:雲盤目錄
onp:當出現重復文件時如何處理,默認是overwrite,安全起見可以更改為new
python 代碼實例
from bypy import bypy
bp = bypy()
bp.mkdir(remotepath='bypy')
bp.upload(localpath='c:\\new\\timg.jpg',remotepath='bypy',onp='new')
print('上傳完畢!')
注意:
中文文件名可能會出現問題,最好使用英文文件名。
❺ 如何在 python 中模擬 post 表單來上傳文件
在機器上安裝了python的setuptools工具,可以通過下面的命令來安裝 poster:
easy_installposter
裝完之後,安裝下面代碼就可以實現post表單上傳文件了:
fromposter.encodeimportmultipart_encode
fromposter.streaminghttpimportregister_openers
importurllib2
#在urllib2上注冊http流處理句柄
register_openers()
#開始對文件"dsc0001.jpg"的multiart/form-data編碼
#"image1"是參數的名字,一般通過html中的標簽的name參數設置
#headers包含必須的content-type和content-length
#datagen是一個生成器對象,返回編碼過後的參數
datagen,headers=multipart_encode({"image1":open("dsc0001.jpg","rb")})
#創建請求對象(localhost伺服器ip地址,5000伺服器埠)
request=urllib2.request("http://localhost:5000/upload_image",datagen,headers)
#實際執行請求並取得返回
printurllib2.urlopen(request).read()
❻ 怎麼用http上傳一個文件到伺服器 python
首先,標准http協議對上傳文件等表單的定義在這里:wwwietforg/rfc/rfc1867txt 大概數據包格式如下:
單文件:
content-type: multipart/form-data, boundary=aab03x
--aab03x
content-disposition: form-data; name="field1"
joe blow
--aab03x
content-disposition: form-data; name="pics"; filename="file1.txt"
content-type: text/plain
... contents of file1.txt ...
--aab03x--
多文件:
content-type: multipart/form-data, boundary=aab03x
--aab03x
content-disposition: form-data; name="field1"
joe blow
--aab03x
content-disposition: form-data; name="pics"
content-type: multipart/mixed, boundary=bbc04y
--bbc04y
content-disposition: attachment; filename="file1.txt"
其次,python上傳文件的幾種方法:
1 自己封裝http的post數據包:http//stackoverflowcom/questions/680305/using-multipartposthandler-to-post-form-data-with-python
import httplibimport mimetypesdef post_multipart(host, selector, fields, files): content_type, body = encode_multipart_formdata(fields, files) h = httplib.http(host) h.putrequest('post', selector) h.putheader('content-type', content_type) h.putheader('content-length', str(len(body))) h.endheaders() h.send(body) errcode, errmsg, headers = h.getreply() return h.file.read() def encode_multipart_formdata(fields, files): limit = '----------limit_of_the_file_ew_$' crlf = '\r\n' l = [] for (key, value) in fields: l.append('--' limit) l.append('content-disposition: form-data; name="%s"' % key) l.append('') l.append(value) for (key, filename, value) in files: