python - 使用 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'
解决方案
我认为,错误不是来自无效字符,而是来自您试图在本地打开 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)
推荐阅读
- swift - 使用 UISlider 的起始值问题
- azure-devops - Azure 管道从包装管道运行两个或多个独立管道?
- c - sem_post 是否唤醒了一个随机进程
- vb.net - vb.net DataGridView 仅在选定单元格中进行循环编号
- android - 如果 apk 仅使用 v2 签名方案进行签名,则获取证书指纹
- javascript - 将错误消息分配给 req.session.error 的目的是什么?
- angular - NGRX 效果抛出错误类型 XXXX 不可分配给类型 'ObservableInput
' - node.js - 将 Reactjs 连接到 Myqtthub
- python - Scrapy 无法抓取下一页
- excel - Excel:四舍五入最近的值