python ftplib上傳文件名亂碼的解決辦法
公司安排我用RPA把各電商平臺(tái)昨天直播和視頻相關(guān)的曝光、銷(xiāo)售等數(shù)據(jù)下載下來(lái),我用rpa基本一個(gè)星期完成了,最后用影刀RPA自帶的ftp文件上傳工具,都指定的ftp服務(wù)器上,用RPA上傳后,文件名都是亂碼,默認(rèn)RPA內(nèi)嵌的ftplib的默認(rèn)編碼是拉丁文編碼,上傳中文就是亂碼,默認(rèn)組件又沒(méi)有其他設(shè)置(比方說(shuō)編碼方面),于是被迫放棄現(xiàn)場(chǎng)的組件,自行編寫(xiě)代碼以期解決,百度了一下:
1、嘗試上傳前,按照提示把文件名轉(zhuǎn)成utf-8,
def upload(f, remote_path, local_path): fp = open(local_path, "rb") #,encoding='utf-8' buf_size = 1024 # f.storbinary("STOR {}".format(remote_path), fp, buf_size) # f.storbinary("STOR {}"+remote_path, fp, buf_size) # f.storbinary("STOR {}".format(remote_path)+r"/20250413_抖音_XXX服飾旗艦店_視頻合作視頻數(shù)據(jù)_1744606680.xlsx", fp, buf_size) # f.storbinary("STOR "+remote_path+r"/aa.xls", fp, buf_size) #單文件ok filenam2=local_path[local_path.rfind('\\')+1:].strip() print(filenam2+"#"+remote_path+"#"+local_path) filenam3=filenam2.encode('utf-8').decode('iso-8859-1') f.storbinary("STOR "+remote_path+filenam3, fp, buf_size) fp.close()
亂碼還在,不起作用。
2、網(wǎng)上有說(shuō)改源碼的,我這里是用影刀RPA作的,找他的源碼,電腦D盤(pán)搜索中。最后在我改源碼前,找到了更好的辦法,故這個(gè)方法沒(méi)有再試了。
3、把編碼設(shè)置成通用的utf-8還是不行
4、把編碼設(shè)置成通用的拉丁文還是不行:
ftp.encoding="iso-8859-1"
5、看文檔說(shuō)可以使用paramiko 我安裝完了,測(cè)試:
def upload_file_via_ftp(hostname, port, username, password, local_file_path, remote_file_path): # 創(chuàng)建SSH客戶(hù)端實(shí)例 client = paramiko.SSHClient() # 自動(dòng)添加策略,保存服務(wù)器的主機(jī)名和密鑰信息 # client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) try: # 連接到服務(wù)器 client.connect(hostname, port, username, password) # 使用SFTPClient進(jìn)行文件傳輸 sftp = client.open_sftp() sftp.put(local_file_path, remote_file_path) print(f"文件 {local_file_path} 已成功上傳到 {remote_file_path}") # 關(guān)閉SFTP連接 sftp.close() except Exception as e: print(f"上傳文件時(shí)發(fā)生錯(cuò)誤: {e}") finally: # 關(guān)閉SSH連接 client.close()
報(bào):
Error reading SSH protocol banner
不知道ftp服務(wù)器上用哪個(gè)軟件設(shè)置的ftp功能,不知道知不知支持ssh,如果不支持的話(huà),我就是白費(fèi)勁。
6、又看文檔說(shuō) pysftp 支持中文,我安裝,測(cè)試:
def main(args): with pysftp.Connection(glv['gvarFtpSerIP'], username=glv['gvarFtpUid'], password=glv['gvarFtpPs'],port=30000) as sftp: # sftp.get('遠(yuǎn)程中文文件.txt', '本地文件.txt') # 下載 sftp.put(r"C:\20250413_抖音_XXX服飾旗艦店_視頻合作視頻數(shù)據(jù)_1744606680.xlsx", '20250413_抖音_XXXX服飾旗艦店_視頻合作視頻數(shù)據(jù)_1744606680.xlsx') # 上傳 sftp.close()
報(bào):'Connection' object has no attribute '_sftp_live' ,查了一圈,沒(méi)找到類(lèi)似login 和 openftp的方法,暫時(shí)沒(méi)有好的辦法
7、又轉(zhuǎn)而看看內(nèi)嵌的ftplib,之前都是設(shè)置 utf-8,我靈機(jī)一動(dòng),為啥不設(shè)置 gbk呢?于是測(cè)試一下,效果可以。
最后代碼如下:
from ftplib import FTP def upload(f, remote_path, local_path): fp = open(local_path, "rb") #,encoding='utf-8' buf_size = 1024 # f.storbinary("STOR "+remote_path+r"/aa.xls", fp, buf_size) #純英文文件名ok filenam2=local_path[local_path.rfind('\\')+1:].strip() print(filenam2+"#"+remote_path+"#"+local_path) f.storbinary("STOR "+remote_path+filenam2, fp, buf_size) fp.close() def main(args): ftp = FTP() ftp.encoding='gbk'# ok 這里最重要 ftp.connect(glv['gvarFtpSerIP'], 30000) # 第一個(gè)參數(shù)可以是ftp服務(wù)器的ip或者域名,第二個(gè)參數(shù)為ftp服務(wù)器的連接端口,默認(rèn)為21 ftp.set_debuglevel(2) ftp.login(glv['gvarFtpUid'], glv['gvarFtpPs']) # 匿名登錄直接使用ftp.login() ftp.cwd(glv['gvarRemotPath']) # 切換到tmp目錄 upload(ftp,"/sjzt/pp/ds/douyin/",r"C:\[20250411]_[抖音]_[XXXX服飾旗艦店]_[視頻合作視頻數(shù)據(jù)]_[1744461854].xlsx") # 將當(dāng)前目錄下的a.txt文件上傳到ftp服務(wù)器的tmp目錄,命名為ftp_a.txt # 上面也是Ok 的 # download(ftp, "ftp_a.txt", "b.txt") # 將ftp服務(wù)器tmp目錄下的ftp_a.txt文件下載到當(dāng)前目錄,命名為b.txt ftp.quit()
到此這篇關(guān)于python ftplib上傳文件名亂碼的解決辦法的文章就介紹到這了,更多相關(guān)python ftplib上傳文件名亂碼內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用python3調(diào)用wxpy模塊監(jiān)控linux日志并定時(shí)發(fā)送消息給群組或好友
這篇文章主要介紹了使用python3調(diào)用wxpy模塊,監(jiān)控linux日志并定時(shí)發(fā)送消息給群組或好友,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-06-06使用Python在Excel工作表中創(chuàng)建數(shù)據(jù)透視表的方法
在數(shù)據(jù)處理和分析工作中,Excel作為一個(gè)廣泛使用的工具,提供了強(qiáng)大的功能來(lái)管理和解析數(shù)據(jù),當(dāng)面對(duì)大量復(fù)雜的數(shù)據(jù)集時(shí),為了更高效地總結(jié)、分析和展示數(shù)據(jù),創(chuàng)建數(shù)據(jù)透視表成為一種不可或缺的方法,本文將介紹如何使用Python在Excel工作表中創(chuàng)建數(shù)據(jù)透視表2025-01-01python使用openpyxl實(shí)現(xiàn)對(duì)excel表格相對(duì)路徑的超鏈接的創(chuàng)建方式
這篇文章主要介紹了python使用openpyxl實(shí)現(xiàn)對(duì)excel表格相對(duì)路徑的超鏈接的創(chuàng)建方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03selenium在執(zhí)行phantomjs的API并獲取執(zhí)行結(jié)果的方法
今天小編就為大家分享一篇selenium在執(zhí)行phantomjs的API并獲取執(zhí)行結(jié)果的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-12-12Python3如何使用多線(xiàn)程升程序運(yùn)行速度
這篇文章主要介紹了Python3如何使用多線(xiàn)程升程序運(yùn)行速度,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08Python實(shí)現(xiàn)前向和反向自動(dòng)微分的示例代碼
自動(dòng)微分技術(shù)(稱(chēng)為“automatic differentiation, autodiff”)是介于符號(hào)微分和數(shù)值微分的一種技術(shù),它是在計(jì)算效率和計(jì)算精度之間的一種折衷。本文主要介紹了Python如何實(shí)現(xiàn)前向和反向自動(dòng)微分,需要的可以參考一下2022-12-12