mkdir_p(ftp, ftp_path)创建目录报错TypeError: can only concatenate str (not "bytes") to str
时间: 2023-07-23 10:12:39 浏览: 144
mkdir命令 创建目录
5星 · 资源好评率100%
这个错误通常是因为 `ftp_path` 参数是一个 `bytes` 类型的对象,而程序中使用了 `str` 类型的对象进行拼接导致的。解决这个问题通常有以下几种方法:
1. 将 `ftp_path` 参数转换为 `str` 类型:可以使用 `ftp_path.decode('utf-8')` 方法将 `ftp_path` 参数转换为 `str` 类型,然后再进行拼接。例如,可以将 `ftp.cwd(directory + str("/"))` 改为 `ftp.cwd(directory.decode('utf-8') + "/")`。
2. 将其他字符串参数转换为 `bytes` 类型:可以使用 `str.encode('utf-8')` 方法将其他字符串参数转换为 `bytes` 类型,然后再进行拼接。例如,可以将 `ftp.cwd(directory + str("/"))` 改为 `ftp.cwd(directory + "/".encode('utf-8'))`。
以下是一个示例代码:
```
import ftplib
def mkdir_p(ftp, path):
# 递归创建 FTP 目录
dirs = path.split("/")
for dir in dirs:
try:
ftp.cwd(dir.decode('utf-8'))
except:
try:
ftp.mkd(dir.encode('utf-8'))
except:
try:
ftp.mkd(dir.encode('gbk'))
except:
ftp.mkd(dir.encode('latin1'))
ftp.cwd(dir.decode('utf-8') + "/")
# 连接 FTP
ftp = ftplib.FTP('ftp.example.com')
ftp.login('username', 'password')
# 创建目录
path = b"/path/to/new/directory"
try:
ftp.cwd(path.decode('utf-8')) # 切换到目录,如果目录存在,则不会报错
except ftplib.error_perm:
mkdir_p(ftp, path) # 目录不存在,则递归创建路径和目录
# 关闭连接
ftp.quit()
```
上述代码中,我们在 `mkdir_p()` 函数中使用 `dir.decode('utf-8')` 将 `bytes` 类型的对象转换为 `str` 类型的对象。在 `ftp.cwd()` 和 `ftp.mkd()` 方法中使用了不同的编码方式进行尝试。
阅读全文