使用python循环下载FTP文件列表报错,错误提示是这样的
AttributeError: 'NoneType' object has no attribute 'sendall'
我的代码是这样
#!/usr/bin/python3
#coding:utf-8
from ftp_server import FtpServer
from log import info_output,error_output,warning_output
from common import save_sessionid,load_json
import json
import requests
import hashlib
import time
import os
config = load_json()
file_list_done = "file.list"
isExists = os.path.exists(config['local_dir'])
if not isExists:
os.makedirs(config['local_dir'], mode=0o777)
ftp_operation = FtpServer(config['ftp_host'], config['ftp_user'], config['ftp_pass'], config['ftp_port'])
ftp_file_list = ftp_operation.listRemoteFile(config['remote_dir'])
data_dict_list = []
for p in ftp_file_list:
ftp_operation = FtpServer(config['ftp_host'], config['ftp_user'], config['ftp_pass'], config['ftp_port'])
ftp_operation.downloadRemoteFile(config['local_dir'], config['remote_dir'], p)
try:
#读取文件内容拼接成字典组成的列表
with open(config['local_dir']+p, "r", encoding="utf-8") as f:
while True:
line = f.readline()
line = line.strip("\n")
if not line:
break
else:
data_list = line.split("|")
timearray = time.strptime(data_list[4].strip('"'), "%Y-%m-%d %H:%M:%S")
createtime = int(time.mktime(timearray))
data_dict_list.append({"record_id":data_list[3].strip('"'), "timestamp":createtime, "device_id":data_list[0].strip('"'), "imsi":data_list[5].strip('"')})
#将已经读取过的文件名写入file.list列表,防止重复读取
with open(file_list_done, "a+", encoding="utf-8") as g:
g.write(p+"\n")
except Exception as e:
error_output(e)
for p in data_dict_list:
with open("a.json", "a+", encoding="utf-8") as g:
g.write(json.dumps(p)+"\n")然后再stackoverflow上找到了类似的问题,出现问题的原因我揣测如下
都英语,我英语不好,大概意思是在for循环中,下载文件以后会断开FTP服务器,然后再下一次循环中,需要重新创建FTP对象来连接FTP服务器,所以在上述代码中我们需要在下载文件的时候再一次创建FTP对象
在for循环中第一行添加一个
ftp_operation = FtpServer(config['ftp_host'], config['ftp_user'], config['ftp_pass'], config['ftp_port'])
这样就好了。
但是这样我感觉还是怪怪的,我上面明明创建了FTP对象,在FTP类中也没有ftp.close()或者ftp.quit()操作,为什么非要再次创建FTP对象,才能循环下载FTP文件成功,有点想不通啊
搞笑了,在类的方法里面try里面关闭了,单独写了个ftp.close()用上就好了。。。太粗心了,直接查看修改好的FTP类吧:https://sulao.cn/post/640
内容版权声明:除非注明,否则皆为本站原创文章。
转载注明出处:https://sulao.cn/post/644
评论列表