使用retrbinrary()编写看似随机的错误

时间:2014-04-29 07:42:55

标签: python ftp ftplib

我正在尝试从ftp服务器上下载一个文本文件及其工作,但是当我正在检查数据时,它似乎随机地错过了读取数据并在我期待的时候写了两行,例如:

DYO8 6    GB1925    5 20582
DYO8 8    GB1882    1 4717
DYO8 8    GB744
     2 12003
DYO8 8    GB1925    3 15199
DYO8 8    GB1970    4 19102

我无法看到造成这种情况的模式。但我会期待这个:

DYO8 6    GB1925    5 20582
DYO8 8    GB1882    1 4717
DYO8 8    GB7442    1 2003
DYO8 8    GB1925    3 15199
DYO8 8    GB1970    4 19102

我的代码如下,newfiles是要读取的文件列表

def writeline(line):
    file.write(line + "\n")

for filename in newfiles: 
    local_filename = os.path.join(r"c:\local\path", filename)    
    try: 
        file = open(local_filename, "wb") 
        ftp.retrbinary('RETR %s' % filename, writeline)
    except ftplib.error_perm:
        print 'ERROR: cannot read file "%s"' % local_filename
        file.close()
    file.close()

刚收到一位同事的建议,这可能是通过整个阅读和ftp服务器问题。因为它通过一个特殊的角色捕捉和发送,或导致读取大脑屁并开始一个新的线。这有助于任何人看到这种可能性吗?在继续之前,或许检查线路的方法是正确的吗?

任何帮助将不胜感激。感谢。

1 个答案:

答案 0 :(得分:0)

我回过头来看看在retrbinary()中编写的替代方法,然后摆脱了整个单独的函数。由于我仍然不知道是什么导致了最初的问题,我无法解释为什么这有效,但我可以看到它确实有效。目前的代码:

for filename in newfiles: 
    local_filename = os.path.join(r"c:\upsaccesspoints", filename)    
    try: 
        file = open(local_filename, "wb") 
        ftp.retrbinary('RETR %s' % filename, file.write)
    except ftplib.error_perm:
        print 'ERROR: cannot read file "%s"' % local_filename
        file.close()
    file.close()

我想说这是我最后一次从互联网上获取有关如何编码的建议,但那是一个公然的谎言。