Python ftplib 损坏文件?

2024-03-31

我正在使用 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 成功执行此操作。

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

有没有人遇到过使用损坏的文件内容的任何问题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))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python ftplib 损坏文件? 的相关文章

随机推荐