首页 > 解决方案 > 使用 ftplib python 创建一个带有特殊字符的文件

问题描述

我正在尝试创建一个脚本,该脚本读取 ftp 目录中的所有“.csv”文件,并在该目录本身中创建具有相同名称的文件。创建的新文件将完全相同,但扩展名为“.done”。

现在我在这里遇到了特殊字符。它不允许我创建带有特殊字符的文件名。请帮帮我,我们应该在这里做什么?这是我的代码片段

import ftplib
from  datetime import date
import glob, os


ftp = ftplib.FTP("host.com")
ftp.login("hostlogin", "yourpwd")
ftp.cwd('/test')

filenames = ftp.nlst('*.csv')

print (filenames)

for file in filenames:
    with open(file, 'r', encoding='UTF-8') as f:
        ftp.storbinary('STOR %s' % file+'.done', f)
        f.close()

ftp.quit()

我收到了这个错误:

OSError: [Errno 22] Invalid argument: 'blabla_2020-02-19_03:56:10.csv'

标签: pythonpython-3.xftplib

解决方案


我认为,错误不是来自无效字符,而是来自您试图在本地打开 ftp 上的文件。

如果您只想重命名文件,请使用ftp.rename(fromname, toname)命令:

for file in filenames:
    ftp.rename(file, f"{file}.done")

如果您想通过 ftp 进行复制,您应该首先在本地检索文件,然后以不同的名称上传:

for file in filenames:
    with open(file, "wb") as f:
        ftp.retrbinary(f"RETR {file}", lambda data: f.write(data))

    with open(file, "rb") as f:
        ftp.storbinary(f"STOR {file}.done", f)

推荐阅读