Python ftplib损坏文件?

2024-09-29 19:27:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我用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上获取的并不是发布到FTP上的文件,因为我还有一个Perl脚本,可以从同一个FTP中成功地执行此操作。在

如果是其他信息,则调试器在下载文件时会在命令提示符中显示以下内容:

enter image description here

有人在Python的ftplib中遇到过使用retrbinary()损坏文件内容的问题吗?在

我真的被困住了/沮丧了,在这里还没有遇到任何与腐败有关的事情。感谢任何帮助。在


Tags: 文件lambdainhostusernameftppasswordfilter
1条回答
网友
1楼 · 发布于 2024-09-29 19:27:31

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

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

您要做的是在ASCII传输模式下检索文件。在

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

不幸的是,这会从文件中删除所有新行字符。讨厌!在

因此,您需要再次添加剥离的新行字符:

^{pr2}$

这应该行得通,但看起来没那么好看。所以只要稍微清理一下就能:

temporaryFile   = open(os.path.join(localDirectory, currentFile), 'w')
textLines       = []
retrieveCommand = 'RETR '

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

相关问题 更多 >

    热门问题