python----ftplib中遇到中文路径错误问题

python----ftplib中遇到中文路径错误问题

笔者在写一个简易的ftp程序的时候。

遇到返回提示说找不到FTP上的路径。

但是路径肯定时没错的。

而且当路径变成普通的不含中文的路径的时候,就是正常的。

下面是笔者的代码

#!/usr/bin/python3
#-*- coding: utf-8 -*-
from ftplib import FTP
import sys,time,os,hashlib

#定义时间
sys_time = time.time()
sys_time_array = time.localtime(sys_time)
current_time = time.strftime("%Y-%m-%d %H:%M:%S:",sys_time_array)

class ftp():
    def __init__(self,ip,port,user,password):
        self.ip = ip
        self.port = port
        self.user = user
        self.password = password

    #----------------定义下载模块-----------------#
    def ftp_download(self,remote_path,local_path):
        ftp = FTP()
        try:
            ftp.connect(self.ip,self.port)
            ftp.login(self.user,self.password)
        except:
            print(‘connect to FTP server failed!!!‘)
        else:
            file_list = ftp.nlst(remote_path)
            key = os.path.exists(local_path)
            if str(key) == ‘True‘:
                pass
            else:
                os.makedirs(local_path)
            print("downloading!!!")
            try:
                for file in file_list:
                    bufsize = 1024
                    file_name = file.split(‘/‘)[-1]
                    local_file = open(local_path+file_name,‘wb‘)
                    ftp.retrbinary(‘RETR %s‘%(file),local_file.write,bufsize)
                    ftp.set_debuglevel(0)
                    local_file.close()
            except:
                print("%s %s download failed!!!" %(current_time,remote_path))
            else:
                print("%s %s download successfully!!!" %(current_time,remote_path))

    #----------------定义上传模块-----------------#
    def ftp_upload(self,remote_path,local_path):
        ftp = FTP()
        try:
            ftp.connect(self.ip,self.port)
            ftp.login(self.user,self.password)
        except:
            print(‘connect to FTP server failed!!!‘)
        else:
            try:
                ftp.mkd(remote_path)
            except:
                pass
        try:
            file_list = os.walk(local_path)
            for root,dirs,files in file_list:
                for file in files:
                    local_file = local_path + file
                    remote_file = remote_path + file
                    bufsize = 1024
                    fp = open(local_file,‘rb‘)
                    ftp.storbinary(‘STOR ‘ + remote_file, fp, bufsize)
                    fp.close()
        except:
            print("%s %s upload failed!!!" %(current_time,local_path))
        else:
            print("%s %s upload successfully!!!" %(current_time,local_path))

查阅了很多网上的资料,发现在python自带的模块ftplib.py中定义了编码模式

vim /usr/local/python3/lib/python3.6/ftplib.py

初始的编码模式是

coding = ‘latin-1‘

后来笔者把他改成了‘utf-8’

但是问题并不能解决

最后笔者狠下心来把他改成了

encoding = "GB2312"

问题迎刃而解

这里的重点应该是了解FTP服务器究竟是搭建在什么机子上,然后需要把ftplib.py中的编码模式改成对应的编码模式。

原文地址:https://www.cnblogs.com/QicongLiang/p/10268425.html

时间: 2024-10-05 03:10:19

python----ftplib中遇到中文路径错误问题的相关文章

在Python中处理中文路径

最近在Windows下使用Python进行Swift API的开发,其中对象(相当于文件)上传和下载会涉及到中文路径,可是纠结了好长时间,总是提示路径不存在,后来经过多方查找资料和咨询,终于找到问题所在.对文件路径需要使用Unicode编码: local_path = unicode(local_path, 'utf8) file = open(local_path, 'rb') 文章出自:http://blog.csdn.net/twlkyao/article/details/26715443

c++中sqlite中文路径创建数据库失败的问题

 sqlite3里面使用的是utf-8的编码,所以在创建数据库的时候若果路径是纯英文字母和数字的话,那么多ansii和utf-8编码是一样的,这个时候sqlite3_open函数的调用完全没问题.但是如果是中文的话asnsii直接转化为Utf-8就会出错, 找不到路径,从而创建或者打开数据库失败.解决的方法如下: //sdk中可以直接从UNICODE转为utf-8,不能直接从ansii转为utf-8 //所以 Ansii要转为Utf-8, 需要先转为UNICODE 再转为utf-8 void U

python中由于中文路径引起的os.path.isfile(imgpath) == False问题

昨天在用python脚本处理文件的时候,遇到了题述问题,明明文件时存在的,但是在用os.path.isfile(imgpath) == False进行判断的时候总是成立,在一开始以为是正反斜杠windows与linux不同导致的,后来发现时因为中文路径造成的. 在网上查阅了解决办法如下: imgpath = unicode(imgpath, "utf8") 利用上述语句将imgpath的编码进行转换,然后再进行判断以及后续的图片读取(使用cv2模块)就都没有问题了.

Python列表中包含中文时输出十六进制转中文的小方法

现象:列表中的中文打印出来后显示为十六进制 >>> lt=['大神','zhzhgo'] >>> print lt ['\xb4\xf3\xc9\xf1', 'zhzhgo'] >>> 首先需要明确,这不是乱码,这是 unicode 字符串在内存中的形式,python 在命令行界面输出的数据,如果不是ASCII码,则会以十六进制形式输出. 如何使打印出来的结果显示为中文呢?解决办法如下: #-*-coding:utf-8-*- lt=["大神

处理python字符串中的中文字符

# -*- coding:utf-8 -*- import sys,os txta = open('a.txt','r') str = '' for line in txta: str += line.strip().decode('utf-8') txta.close() for word in str: print word.encode('utf-8') 直接输出,是会乱码的,得先解码,再编码. 参考网址:http://blog.csdn.net/devil_2009/article/de

python字典中显示中文

#coding=utf-8import jsondict={'title':"这是中文"}print json.dumps(dict,ensure_ascii=False,encoding="utf-8") books=[ {'name':u'C#从入门到精通','price':23.7,'store':u'卓越'}, {'name':u'C#从入门到精通二','price':44.5,'store':u'当当'}, {'name':u'C#从入门到精通三','pr

python3 网址路径中带中文的处理办法

由于python目前不能直接处理中文路径,必须要转化一下,如下例子是下载图片(名字为中文的): def getInfo(self,imageurl):        response = urllib.request.urlopen(imageurl).read().decode('utf-8')#         with open("text1.txt",'w',encoding='utf-8') as file:#             file.write(response)

Python中中文路径处理问题的研究

a = '你' 为 str 对象 a = u'你' 为 unicode 对象 1. >>> print 'u'  + '你' >>> u浣 输出乱码 2. >>> print 'u'  + u'你' >>> u你 正常 3. >>> print 'u你' >>> u浣 输出乱码 4. >>> print 'u你' + 'u' >>> u浣爑 输出乱码 5. >

python爬虫:解决请求路径中含义中文或特殊字符

一.解决请求路径中含义中文或特殊字符(/n,/t等): 1 httpurl=urllib.parse.quote(new_url, safe=string.printable)  注意:new_url必须是只有一个单引号或者双引号,如果是下面这个既有单引号,也有双引号,就会出现urlerror: new_url='"http://news.sina.com.cn/o/2017-06-08/doc-ifyfzaaq5698972.shtml"'