gpt4 book ai didi

Python ftplib 损坏文件?

转载 作者:行者123 更新时间:2023-12-04 17:33:23 25 4
gpt4 key购买 nike

我正在使用 ftplib 在 Python 中下载文件,直到最近一切似乎都运行良好。我正在下载这样的文件:

ftpSession = ftplib.FTP(host,username,password)
ftpSession.cwd('rlmfiles')
ftpFileList = filter(lambda x: 'PEDI' in x, ftpSession.nlst())
ftpFileList.sort()
for f in ftpFileList:
tempFile = open(os.path.join(localDirectory,f),'wb')
ftpSession.retrbinary('RETR '+f,tempFile.write)
tempFile.close()
ftpSession.quit()
sys.exit(0)

直到最近,它一直在下载我需要的文件,正如预期的那样。但是,现在我正在下载的文件已损坏,仅包含长串垃圾 ASCII。我知道这不是张贴到 FTP 上的文件,因为我还有一个 Perl 脚本可以从同一个 FTP 成功执行此操作。

如果是任何附加信息,以下是下载文件时调试器在命令提示符中显示的内容:

enter image description here

是否有人在使用 retrbinary() 时遇到文件内容损坏的任何问题?在 Python 的 ftplib 中?

我真的被卡住/沮丧,并且没有遇到任何与这里可能的腐败有关的事情。任何帮助表示赞赏。

最佳答案

我昨天在尝试下载文本文件时遇到了这个问题。不确定这是否是您在做什么,但既然您说其中包含 ASCII 垃圾,我假设您在文本编辑器中打开它,因为它应该是文本。

如果是这种情况,则问题在于该文件是一个文本文件,而您正尝试以二进制模式下载它。

您想要做的是以 ASCII 传输模式检索文件。

tempFile = open(os.path.join(localDirectory,f),'w')  # Changed 'wb' to 'w'
ftpSession.retrlines('RETR '+f,tempFile.write) # Changed retrbinary to retrlines

不幸的是,这会从文件中删除所有换行符。糟糕!

因此,您需要再次添加删除的换行符:
tempFile = open(os.path.join(localDirectory,f),'w')
textLines = []
ftpSession.retrlines('RETR '+f,textLines.append)
tempFile.write('\n'.join(textLines))

这应该可以工作,但它看起来并不像它应该的那么好。所以一些清理工作会让我们:
temporaryFile   = open(os.path.join(localDirectory, currentFile), 'w')
textLines = []
retrieveCommand = 'RETR '

ftpSession.retrlines(retrieveCommand + currentFile, textLines.append)
temporaryFile.write('\n'.join(textLines))

关于Python ftplib 损坏文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16018721/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com