Python ftplib腐败文件?

时间:2013-04-15 15:11:35

标签: python ftp corruption

我正在使用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

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

我真的感到困惑/沮丧,并没有遇到任何与可能的腐败有关的事情。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:2)

昨天我试图下载文本文件时遇到了这个问题。不确定这是不是你在做什么,但既然你说它有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))