教程超级详细
https://jingyan.baidu.com/article/48b37f8d06fb851a64648802.html
若搭建时,没有用户和组,且为winx为家庭版,换台有用户和组的电脑
若搭建完成后使用python进行ftp连接出现:[WinError 10060] 由于连接方在一段时间后没有正确答复或连接的主机没有反应
或使用文件连接ftp时出现连接不上的错误,均因为没有设置防火墙
https://jingyan.baidu.com/article/f3e34a12fb77f1f5ea653566.html
代码:
nc_download_path = os.path.join("\\",path_L1, path_L2) # ftp端路径
wd_name = " Ruler." + path_L2 + "200000.012.WindEx12.nc"
ws_name = "Ruler." + path_L2 + "200000.012.Ww12.nc"
pre_name = "Ruler." + path_L2 + "200000.024.Pr24.nc"
tem_name = "Ruler." + path_L2 + "020000.000.T.nc"
weather_list = [wd_name,ws_name,pre_name,tem_name]
# 本地端存放nc数据的路径不能有中文
local_path = os.path.join("D:\\qdh_nc_download\\", path_L1, path_L2)
def ftp_connect():
"""用于FTP连接"""
# 测试地址
ftp_server = '' # ftp站点对应的IP地址
username = '' # 用户名
password = '' # 密码
try:
ftp = FTP(ftp_server) # 实例化FTP对象
ftp.login(username, password) # 登录
return ftp
except (socket.error, socket.gaierror):
print("FTP登陆失败,请检查主机号、用户名、密码是否正确")
sys.exit(0)
def remote_file_exists(ftp, weather_file):
"""用于FTP站点目标文件存在检测"""
ftp.cwd(nc_download_path) # 进入目标目录
remote_file_names = ftp.nlst() # 获取文件列表
if weather_file in remote_file_names:
return True
else:
return False
def download_file(ftp, weather_file):
"""用于目标文件下载"""
buffer_size = 1024
download_ftp_file = os.path.join('\\',nc_download_path, weather_file)
local_write_file = os.path.join(local_path, weather_file)
if not os.path.exists(local_path):
os.makedirs(local_path)
if not os.path.exists(local_write_file):
f = open(local_write_file, "wb")
ftp.retrbinary('RETR {0}'.format(download_ftp_file), f.write, buffer_size)
f.close()
ftp = ftp_connect()
for w_file in weather_list:
# if if_file: # 判断远端是否已有文件
if remote_file_exists(ftp,w_file): # 判断远端是否已有文件
download_file(ftp, w_file)
else:
print("ftp中无文件",w_file)
ftp.quit()