【Python】ftplib的使用

仅描述基础要点,备忘。

python自带ftplib库,可实现ftp读写。

1 要点

  • ftp未使用默认端口21时,需显示指定端口。
  • ftp路径带有中文,可能需要设置ftp的encoding属性为 gbk。
  • ftplib不支持递归创建目录,需手动创建层级目录。

2 代码

2.1 下载文件

import os
from ftplib import FTPftp_server = '192.168.162.128'
ftp_port = 31  # FTP默认端口是21
uname = 'test'
upwd= 'test'
# 匿名访问是 用户名是anonymous, 密码随便填写remote_file_path = '/haha/hi.txt'
local_file_path = os.path.join(os.getcwd(), 'hi.txt')  # 与脚本同目录ftp = FTP()
try:ftp.connect(host=ftp_server, port=ftp_port)ftp.encoding = 'gbk'  # 国内可能需要 若ftp路径有中文ftp.login(user=uname, passwd=upwd)ftp.set_pasv(True)  # 切换到被动模式(大多数情况下需要)with open(local_file_path, 'wb') as file:ftp.retrbinary(f'RETR {remote_file_path}', file.write)print(f"文件已成功下载到 {local_file_path}")
except Exception as e:print(f"发生错误: {e}")finally:ftp.quit()  # 断开连接

2.2 上传文件

    remote_file = '/202406/hk/hi.txt'local_file= os.path.join(os.getcwd(), 'hi.txt')with open(local_file, 'rb') as file:ftp.storbinary(f'STOR {remote_file }', file)

2.3 逐级创建目录

因ftplib不支持递归创建目录,需手动创建层级目录。

# 注意此函数只传入 目录,不能传入文件的全路径
# 若传入如 /path/my.txt 其会创建 path 及子目录 my.txt
# 即其将 my.txt 也认为是目录名
def ensure_dir(ftp, path):parts = path.strip('/').split('/')  # 去除首尾的/,再将路径分隔current_path = '/'  # 记录当前路径for part in parts:# 构建下一个目录路径current_path = current_path + part + '/'try:# 尝试列出目录的内容ftp.dir(current_path)except error_perm as e:try:ftp.mkd(current_path)print(f"目录 '{current_path}' 创建成功。")except error_perm as e:print(f"创建目录 '{current_path}' 失败:{e}")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/46146.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

NAS 必备导航页 Homarr 可视化配置 布局简单且美观

本文首发于只抄博客,欢迎点击原文链接了解更多内容。 前言 之前给大家介绍了 Homepage,但是 Homepage 的每一个链接的添加以及整体的布局都依赖 yaml 文件,而且官方文档关于 yaml 配置项也只有英文。对于没有基础的用户来说,想要配置成自己喜欢的布局有些困难。而今天介绍…

【软件测试】自动化测试常用函数 -- 详解

一、WebDriver API 一个简单自动化脚本的构成: 脚本解析 # coding utf-8 from selenium import webdriver import time browser webdriver.Firefox() time.sleep(3) browser.get("http://www.baidu.com") time.sleep(3) browser.find_element_by_id(…

数据实时化是必要还是偏见?

数据实时化是必要还是偏见? 一、前言二、数据仓库的起源三、数据架构的演进四、数据实时化的必要性五、总结 本文主要基于数据仓库的起源和数据架构的演进来聊聊,数据实时化是否真的必要?是"过度优化"、“实时偏见"还是"…

元组-预习

# 元组 tuple() # 定义 tu () # 空元组 tu1 (1, 2, 3) # 一旦初始化,不可再改变# 索引 print(tu1[0]) # 1 print(tu1[-1]) # 3 # print(tu1[3]) # 报错 超出索引范围# 切片 tu2 (1, 2, 3, 4, 5) print(tu2[0:2])# 不允许改变tu2[0] 6 # TypeError: tuple …

【数据结构】手写快速排序

一、理念 什么是快速排序&#xff1f; 首先确立pivot&#xff0c;比如下图位于末尾 然后i遍历3到6 在3的时候&#xff0c;j指向i前面一位 如果3<5(pivot)&#xff0c;那么j&#xff0c;同时将i与j指向的交换&#xff0c;第一次交换是原地不动 一直到遇见9&#xff0c;…

数据结构和算法(0-1)----递归

定义​ 递归是一种在程序设计中常用的技术&#xff0c;它允许一个函数调用自身来解决问题。递归通常用于解决那些可以被分解为相似的子问题的问题&#xff0c;这些问题的解决方式具有自相似性。在数据结构和算法中&#xff0c;递归是一种重要的解决问题的方法&#xff0c;尤其是…

处于群晖Docker中的HomeAssistant监控宿主机CPU温度

处于群晖Docker中的HomeAssistant监控宿主机CPU温度 解决方案 在configuration.yaml中添加&#xff1a; sensor: - platform: filename: "Host Temperature" # 可以自定义file_path: /sys/class/hwmon/hwmon0/temp1_inputvalue_template: "{{ int(value)/100…

taro小程序terser-webpack-plugin插件不生效(vue2版本)

背景 最近在做公司内部的小程序脚手架&#xff0c;为了兼容老项目和旧项目&#xff0c;做了vue2taro,vue3taro两个模板&#xff0c;发现terser-webpack-plugin在vue2和vue3中的使用方式并不相同&#xff0c;同样的配置在vue3webpack5中生效&#xff0c;但是在vue2webpack4中就…

sql monitoring 长SQL ASH AWR 都没有 未Commit or export to csv

Duration 4小时&#xff0c; Database Time 22.5&#xff0c; Session Inactive&#xff0c; 1.未Commit原因, 2.慢慢导出成csv文件&#xff1f; How is v$session status INACTIVE and v$sql_monitor status EXECUTING concurrently 2641811 Posts: 8 Jan 11, 2016 6:47P…

git安装使用gitlab

第一步&#xff1a;下载git 第二步&#xff1a;安装 第三步&#xff1a;配置sshkey 第四步&#xff1a;处理两台电脑的sshkey问题 第一步下载git 网址&#xff1a;Git点Downloads根据你的操作系统选择对应的版本&#xff0c;我的是Windows&#xff0c;所以我选择了Windows …

Apple Intelligence将如何重新定义iPhone上的Siri使用方式|TodayAI

经过多年的讨论和批评&#xff0c;苹果&#xff08;Apple&#xff09;终于在今年秋季承诺推出更智能版本的数字助理Siri。此次更新得益于苹果智能&#xff08;Apple Intelligence&#xff09;&#xff0c;这是公司推出的生成式AI产品&#xff0c;并与OpenAI合作开发。 Siri将迎…

css画半圆画圆弧

利用border-radius和border完成&#xff1a; <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>test</title> <style> .semicircle {width: 100px;height: 50px;border-radius: 0 0 50px 50px;background:…

springboot系列教程(一):简介与入门案例(含源码)

一、SpringBoot简介 SpringBoot继承了Spring优秀的基因&#xff0c;上手难度小简化配置&#xff0c;提供各种默认配置来简化项目配置内嵌式容器简化Web项目&#xff0c;简化编码 Spring Boot 则会帮助开发着快速启动一个 web 容器&#xff0c;在 Spring Boot 中&#xff0c;只…

【性能测试】第二节.loadrunner工具介绍(LR)

文章目录 前言一、VUG&#xff1a;虚拟用户发生器 1.1 实现作用 1.2 创建一个新的性能测试脚本 1.3 打开LR自带的web系统 1.4 编写性能测试脚本流程方法 1.5 性能测试脚本的增强二、Controller 2.1 基础功能介绍 2.2 Design 2.3 Run三…

手把手教你在Overleaf的IEEE模板中用ref.bib加入引用

手把手教你在Overleaf的IEEE模板中用ref.bib加入引用 文章目录 1. 杂话2. 具体步骤2.1 创建ref.bib文件2.2 加入引用2.3 在tex文件中导入引用 1. 杂话 大伙儿应该都用过Latex和Overleaf吧&#xff0c;具体是个啥东西我就不说了哈。Overleaf上面的在这里IEEE 会议官方模板。之前…

websocket中的STOMP 协议:sockjs-client 和 stompjs

文章目录 一、简介二、安装三、创建 webSocket.ts四、页面中使用一、简介 使用 WebSockets 进行实时通信时,一种常见的实现方式是使用 STOMP 协议。STOMP(Simple Text Oriented Messaging Protocol)是一种轻量级的协议,通常用于客户端和消息代理之间的通信,如 WebSockets…

安防监控视频平台LntonCVS视频融合共享平台智慧消防实现远程集中视频监控方案

近年来&#xff0c;电力系统内变电站着火事件频发&#xff0c;这对消防安全管理提出了严峻挑战。我国消防安全基础设施不完善、管理机制不健全、应急处置能力不足及公众消防安全意识淡薄等问题&#xff0c;严重制约了消防安全的提升。因此&#xff0c;加强变电站的消防安全管理…

Oracle统计信息自动收集任务检查与调整

Oracle统计信息自动收集任务检查与调整 表统计信息收集情况检查统计信息自动收集任务检查统计信息自动收集任务调整表统计信息收集情况检查 检查表的统计信息收集情况: set lines 300 col owner for a30 col table_name for a30 col partition_name for a40 col partitioned…

【C++】 List 基本使用

C List 基本使用 基本概念 list 是一个序列容器&#xff0c;它内部维护了一个双向链表结构。与 vector 或 deque 等基于数组的容器不同&#xff0c;list 在插入和删除元素时不需要移动大量数据&#xff0c;因此在这些操作上具有较高的效率。然而&#xff0c;访问列表中的特定…

课程设计——Python+OpenCV数字图像处理[车牌识别]

Python opencv 车牌识别 数字图像处理课程设计作业Python3OpenCV使用tkinter搭建界面tmp/文件夹是数字图像处理过程chepai/文件夹是车牌图片pic/文件夹是程序界面图PPT文件是验收时要讲的程序是从网上学习的并自己弄的&#xff0c;不完善&#xff0c;识别率不高 开发环境配置…