我正在尝试从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服务器问题。因为它通过一个特殊的角色捕捉和发送,或导致读取大脑屁并开始一个新的线。这有助于任何人看到这种可能性吗?在继续之前,或许检查线路的方法是正确的吗?
任何帮助将不胜感激。感谢。
答案 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()
我想说这是我最后一次从互联网上获取有关如何编码的建议,但那是一个公然的谎言。