Problem with FTPLib and incomplete files on some downloads
Martin Franklin
mfranklin1 at gatwick.westerngeco.slb.com
Wed Jan 18 02:50:59 EST 2006
Peter A.Schott wrote:
> I download a lot of 4-6 KB files and regularly run into issues with files that
> don't get downloaded all the way or otherwise get corrupt.
>
> I do something like:
>
> RemoteList = nlstdir()
> for filename in RemoteList:
> LocalFile = open(filename, "wb")
> LocalFile.write( "get file code here" )
> LocalFile.close()
> #ftplib call to delete the remote file
>
> I've tried to insert a pause into the code between the close and the remote
> delete, but that doesn't seem to help. For some reason it doesn't seem like the
> buffer is completely written or read before the remote delete is called. That
> leads to a file that's not 100% complete and thus can't be decrypted.
>
> Any ideas on what to look for? I don't have my exact code handy at the moment
> or I'd post some actual snippets. It's also not consistent or it would be a
> whole lot easier to troubleshoot. :-)
>
> Running Python 2.4.2 on Win32.
>
> Thanks.
>
> -Pete Schott
Pete,
Not sure but here is an example that seems to always work for me:
(tested this morning before pasting here on ~20 files around 7 - 300 k)
import ftplib
import os
os.chdir("D:/TEMP/dump")
ftp = ftplib.FTP("server")
print ftp.login("anonymous", "me at work.com")
ftp.cwd("pub/Python_Applications")
for rFile in ftp.nlst():
print "Getting : ", rFile
rSize = ftp.size(rFile)
lFile = open(rFile, "wb")
ftp.retrbinary("RETR %s" %rFile, lFile.write)
lSize = lFile.tell()
lFile.close()
if rSize==lSize:
print "Transfer complete"
else:
print "BAD Transfer", rSize, lSize
ftp.close()
HTH
Martin
More information about the Python-list
mailing list