❶ python可以同步本地磁盘文件的字典
是的,Python可以使用os模块的walk函数来同步本地磁盘文件夹中的字典。walk函数会返回一个三元组(root,dirs,files),这个三元组包含根目录、子目录和递归遍历的文件列表,可以组成一个字典,将文件根据它们所属的文件夹来归类。
❷ 用python写测试脚本,从本地传文件至ftp远程路径
转自:http://news.tuxi.com.cn/kf/article/jhtdj.htm
本文实例讲述了python实现支持目录FTP上传下载文件的方法。分享给大家供大家参考。具体如下:
该程序支持ftp上传下载文件和目录、适用于windows和linux平台。
#!/usr/bin/envpython
#-*-coding:utf-8-*-
importftplib
importos
importsys
classFTPSync(object):
conn=ftplib.FTP()
def__init__(self,host,port=21):
self.conn.connect(host,port)
deflogin(self,username,password):
self.conn.login(username,password)
self.conn.set_pasv(False)
printself.conn.welcome
deftest(self,ftp_path):
printftp_path
printself._is_ftp_dir(ftp_path)
#printself.conn.nlst(ftp_path)
#self.conn.retrlines('LIST./a/b')
#ftp_parent_path=os.path.dirname(ftp_path)
#ftp_dir_name=os.path.basename(ftp_path)
#printftp_parent_path
#printftp_dir_name
def_is_ftp_file(self,ftp_path):
try:
ifftp_pathinself.conn.nlst(os.path.dirname(ftp_path)):
returnTrue
else:
returnFalse
exceptftplib.error_perm,e:
returnFalse
def_ftp_list(self,line):
list=line.split('')
ifself.ftp_dir_name==list[-1]andlist[0].startswith('d'):
self._is_dir=True
def_is_ftp_dir(self,ftp_path):
ftp_path=ftp_path.rstrip('/')
ftp_parent_path=os.path.dirname(ftp_path)
self.ftp_dir_name=os.path.basename(ftp_path)
self._is_dir=False
ifftp_path=='.'orftp_path=='./'orftp_path=='':
self._is_dir=True
else:
#thisuescallbackfunction,thatwillchange_is_dirvalue
try:
self.conn.retrlines('LIST%s'%ftp_parent_path,self._ftp_list)
exceptftplib.error_perm,e:
returnself._is_dir
returnself._is_dir
defget_file(self,ftp_path,local_path='.'):
ftp_path=ftp_path.rstrip('/')
ifself._is_ftp_file(ftp_path):
file_name=os.path.basename(ftp_path)
#如果本地路径是目录,下载文件到该目录
ifos.path.isdir(local_path):
file_handler=open(os.path.join(local_path,file_name),'wb')
self.conn.retrbinary("RETR%s"%(ftp_path),file_handler.write)
file_handler.close()
#如果本地路径不是目录,但上层目录存在,则按照本地路径的文件名作为下载的文件名称
elifos.path.isdir(os.path.dirname(local_path)):
file_handler=open(local_path,'wb')
self.conn.retrbinary("RETR%s"%(ftp_path),file_handler.write)
file_handler.close()
#如果本地路径不是目录,且上层目录不存在,则退出
else:
print'EROOR:Thedir:%sisnotexist'%os.path.dirname(local_path)
else:
print'EROOR:Theftpfile:%sisnotexist'%ftp_path
defput_file(self,local_path,ftp_path='.'):
ftp_path=ftp_path.rstrip('/')
ifos.path.isfile(local_path):
file_handler=open(local_path,"r")
local_file_name=os.path.basename(local_path)
#如果远程路径是个目录,则上传文件到这个目录,文件名不变
ifself._is_ftp_dir(ftp_path):
self.conn.storbinary('STOR%s'%os.path.join(ftp_path,local_file_name),file_handler)
#如果远程路径的上层是个目录,则上传文件,文件名按照给定命名
elifself._is_ftp_dir(os.path.dirname(ftp_path)):
print'STOR%s'%ftp_path
self.conn.storbinary('STOR%s'%ftp_path,file_handler)
#如果远程路径不是目录,且上一层的目录也不存在,则提示给定远程路径错误
else:
print'EROOR:Theftppath:%siserror'%ftp_path
file_handler.close()
else:
print'ERROR:Thefile:%sisnotexist'%local_path
defget_dir(self,ftp_path,local_path='.',begin=True):
ftp_path=ftp_path.rstrip('/')
#当ftp目录存在时下载
ifself._is_ftp_dir(ftp_path):
#如果下载到本地当前目录下,并创建目录
#下载初始化:如果给定的本地路径不存在需要创建,同时将ftp的目录存放在给定的本地目录下。
#ftp目录下文件存放的路径为local_path=local_path+os.path.basename(ftp_path)
#例如:将ftp文件夹a下载到本地的a/b目录下,则ftp的a目录下的文件将下载到本地的a/b/a目录下
ifbegin:
ifnotos.path.isdir(local_path):
os.makedirs(local_path)
local_path=os.path.join(local_path,os.path.basename(ftp_path))
#如果本地目录不存在,则创建目录
ifnotos.path.isdir(local_path):
os.makedirs(local_path)
#进入ftp目录,开始递归查询
self.conn.cwd(ftp_path)
ftp_files=self.conn.nlst()
forfileinftp_files:
local_file=os.path.join(local_path,file)
#如果fileftp路径是目录则递归上传目录(不需要再进行初始化begin的标志修改为False)
#如果fileftp路径是文件则直接上传文件
ifself._is_ftp_dir(file):
self.get_dir(file,local_file,False)
else:
self.get_file(file,local_file)
#如果当前ftp目录文件已经遍历完毕返回上一层目录
self.conn.cwd("..")
return
else:
print'ERROR:Thedir:%sisnotexist'%ftp_path
return
defput_dir(self,local_path,ftp_path='.',begin=True):
ftp_path=ftp_path.rstrip('/')
#当本地目录存在时上传
ifos.path.isdir(local_path):
#上传初始化:如果给定的ftp路径不存在需要创建,同时将本地的目录存放在给定的ftp目录下。
#本地目录下文件存放的路径为ftp_path=ftp_path+os.path.basename(local_path)
#例如:将本地文件夹a上传到ftp的a/b目录下,则本地a目录下的文件将上传的ftp的a/b/a目录下
ifbegin:
ifnotself._is_ftp_dir(ftp_path):
self.conn.mkd(ftp_path)
ftp_path=os.path.join(ftp_path,os.path.basename(local_path))
#如果ftp路径不是目录,则创建目录
ifnotself._is_ftp_dir(ftp_path):
self.conn.mkd(ftp_path)
#进入本地目录,开始递归查询
os.chdir(local_path)
local_files=os.listdir('.')
forfileinlocal_files:
#如果file本地路径是目录则递归上传目录(不需要再进行初始化begin的标志修改为False)
#如果file本地路径是文件则直接上传文件
ifos.path.isdir(file):
ftp_path=os.path.join(ftp_path,file)
self.put_dir(file,ftp_path,False)
else:
self.put_file(file,ftp_path)
#如果当前本地目录文件已经遍历完毕返回上一层目录
os.chdir("..")
else:
print'ERROR:Thedir:%sisnotexist'%local_path
return
if__name__=='__main__':
ftp=FTPSync('192.168.1.110')
ftp.login('test','test')
#上传文件,不重命名
#ftp.put_file('111.txt','a/b')
#上传文件,重命名
#ftp.put_file('111.txt','a/112.txt')
#下载文件,不重命名
#ftp.get_file('/a/111.txt',r'D:\')
#下载文件,重命名
#ftp.get_file('/a/111.txt',r'D:112.txt')
#下载到已经存在的文件夹
#ftp.get_dir('a/b/c',r'D:\a')
#下载到不存在的文件夹
#ftp.get_dir('a/b/c',r'D:\aa')
#上传到已经存在的文件夹
ftp.put_dir('b','a')
#上传到不存在的文件夹
ftp.put_dir('b','aa/B/')
希望本文所述对大家的Python程序设计有所帮助。
以下转自:http://blog.csdn.net/linda1000/article/details/8255771
Python中的ftplib模块
Python中默认安装的ftplib模块定义了FTP类,其中函数有限,可用来实现简单的ftp客户端,用于上传或下载文件
FTP的工作流程及基本操作可参考协议RFC959
ftp登陆连接
from ftplib import FTP #加载ftp模块
ftp=FTP() #设置变量
ftp.set_debuglevel(2) #打开调试级别2,显示详细信息
ftp.connect("IP","port") #连接的ftp sever和端口
ftp.login("user","password")#连接的用户名,密码
print ftp.getwelcome() #打印出欢迎信息
ftp.cmd("xxx/xxx") #更改远程目录
bufsize=1024 #设置的缓冲区大小
filename="filename.txt" #需要下载的文件
file_handle=open(filename,"wb").write #以写模式在本地打开文件
ftp.retrbinaly("RETR filename.txt",file_handle,bufsize) #接收服务器上文件并写入本地文件
ftp.set_debuglevel(0) #关闭调试模式
ftp.quit #退出ftp
ftp相关命令操作
ftp.cwd(pathname) #设置FTP当前操作的路径
ftp.dir() #显示目录下文件信息
ftp.nlst() #获取目录下的文件
ftp.mkd(pathname) #新建远程目录
ftp.pwd() #返回当前所在位置
ftp.rmd(dirname) #删除远程目录
ftp.delete(filename) #删除远程文件
ftp.rename(fromname, toname)#将fromname修改名称为toname。
ftp.storbinaly("STOR filename.txt",file_handel,bufsize) #上传目标文件
ftp.retrbinary("RETR filename.txt",file_handel,bufsize)#下载FTP文件
网上找到一个具体的例子:
#例:FTP编程
fromftplibimportFTP
ftp=FTP()
timeout=30
port=21
ftp.connect('192.168.1.188',port,timeout)#连接FTP服务器
ftp.login('UserName','888888')#登录
printftp.getwelcome()#获得欢迎信息
ftp.cwd('file/test')#设置FTP路径
list=ftp.nlst()#获得目录列表
fornameinlist:
print(name)#打印文件名字
path='d:/data/'+name#文件保存路径
f=open(path,'wb')#打开要保存文件
filename='RETR'+name#保存FTP文件
ftp.retrbinary(filename,f.write)#保存FTP上的文件
ftp.delete(name)#删除FTP文件
ftp.storbinary('STOR'+filename,open(path,'rb'))#上传FTP文件
ftp.quit()#退出FTP服务器
完整的模板:
#!/usr/bin/python
#-*-coding:utf-8-*-
importftplib
importos
importsocket
HOST='ftp.mozilla.org'
DIRN='pub/mozilla.org/webtools'
FILE='bugzilla-3.6.7.tar.gz'
defmain():
try:
f=ftplib.FTP(HOST)
except(socket.error,socket.gaierror):
print'ERROR:cannotreach"%s"'%HOST
return
print'***Connectedtohost"%s"'%HOST
try:
f.login()
exceptftplib.error_perm:
print'ERROR:cannotloginanonymously'
f.quit()
return
print'***Loggedinas"anonymously"'
try:
f.cwd(DIRN)
exceptftplib.error_perm:
print'ERRORLcannotCDto"%s"'%DIRN
f.quit()
return
print'***Changedto"%s"folder'%DIRN
try:
#传一个回调函数给retrbinary()它在每接收一个二进制数据时都会被调用
f.retrbinary('RETR%s'%FILE,open(FILE,'wb').write)
exceptftplib.error_perm:
print'ERROR:cannotreadfile"%s"'%FILE
os.unlink(FILE)
else:
print'***Downloaded"%s"toCWD'%FILE
f.quit()
return
if__name__=='__main__':
main()
❸ ftp文件与本地文件的同步
你操作系统什么系统? 如果还是Linux ro linux , 可以用rsync, 调用crontab 定时任务来完成。
❹ 如何将FTP中的一个文件夹同步到本地
你是备份网站吧?用同步软件吧,这样实现起来比较稳定。
我现在觉得比较好用的是BestSync2011同步软件,功能比较全,而且实现起来比较简单。
你可以去网上搜搜。
来个简单的小例:
1. 你本地装上软件以后,在主菜单里面 编辑-->追加任务
文件夹1选择 驱动盘中要备份的文件夹位置
文件夹2选择 选择FTP(填写路径)
同步方向为 文件夹2 --》文件夹1
在 FTP设定 下面填写服务器地址,账户名,密码等信息)
然后选择 完成 按钮
2. 重复1步骤,继续建立其他FTP的同步任务
3. 在主界面下,选中任务列表中所有任务(勾复选框),点击“>>”菜单图标,启动所有选中任务
这样就能实现一次备份多个FTP站点,它可以多个FTP Session快速下载大文件以减少下载时间。 也可以同时下载(多线程)多个小文件,提高下载速度。
你只需要在建立多个任务,每个任务链接到一个FTP地址,然后再主界面下,勾选所有同步任务,点选 开始 按钮,就一起同步了。。。
BestSync有快速扫描功能(同时扫描多个文件夹以减少准备时间),N个小文件扫描也很费时间的。这个功能很有用
❺ python 实现复制粘贴文件后 打包压缩 并连接FTP自动上传到FTP指定目录下
直接用批处理行了
❻ 怎么把FTP服务器上的数据库取出放到本地上
1、FTP客户端准确的连接服务器,IP,端口,账号,密码。
2、选好本地想要保存的目的位置。
3、FTP服务器允许下载。。。
4、只要选择文件,鼠标选中直接拖放到本地硬盘文件夹内即可。
❼ 求帮忙写个python的FTP小脚本或者批处理,复制文件到多个文件夹
有几个办法
1.如果是linux,用scp,最简单。
2.如果是windows,用共享文件夹最简单,共享完后,复制就可以
3.在目标服务器上弄一个服务,可以是FTP也可以是自己定义的socketserver。自己做服务端,也做客户端。这样权限比较大。
4.在目录服务器上安装一个标准的ftp服务器。然后客户端用python,使用ftplib
具体的用法。你自己去试验。不会花多少时间。1个小时就弄好了。
先是使用ftp的CD命令到指定的目录。然后是使用PUT命令上传文件。
不过如果是方法4,而a,b,c又不是在同一个父目录下,可能会有权限问题。
❽ 如何把FTP空间映射到电脑里面的一个盘
安装ftpnetdriver第一步:下载FTPNetDrive主程序并运行出现安装界面,我们点NEXT按钮继续。(如图9)
第二步:同意软件安装许可协议,然后系统复制必须文件到本地硬盘。(如图10)
第三步:完成全部安装工作点“完成”按钮关闭安装向导窗口。(如图11)
第四步:接下来我们会在桌面看到一个NetDrive图标,运行该图标打开NetDrive主程序,全部界面都是英文的。NetDrive虽是一款英文软件,不过使用非常简单,基本操作在主窗口中即可完成。它采用了传统的三栏式窗口布局,窗口上方是功能选项按钮,左侧为站点列表,右侧为对应站点的选项设置区。普通用户只需要按照下面的步骤操作即可。
设置ftp映射到电脑盘符
点击“New Site”按钮增加新的站点,例如:“我的FTP”。接下来在右侧选项设置区中进行参数设置。
NetDrive中的设置项目同专业FTP工具并无二致,它甚至也支持SSL加密及代理服务器功能,下面我们一一做对应说明。
Site name:站点名称。
Site IP or URL:站点IP或者网址。
Port:端口,一般保持默认值21即可。
Server Type:服务器类型,软件支持FTP和WebDav两种网络协议,一般选择FTP。
Drive:驱动器,在这里设置NetDrive虚拟的驱动器盘符,本例选择“H盘”。
Connect as anonymous:以匿名方式登录。
Account/Password:用户名/密码。
Save password:保存密码。
Automatic login when system starts:系统开机后自动登录。拨号用户不建议勾选,除非你的网络始终在线。
Automatic login when NetDrive starts:NetDrive启动后自动登录。
完成上述设置后,点击“Save”保存设置,点击“Connect”生成虚拟磁盘。
❾ 如何把FTP中的文件复制到本地文件夹
把服务器上面的文件复制到本地有多种方法:
一.在服务器上面安装FTP服务端,通常是可以让服务商帮你安装的.然后在本地电脑上安装flashfxp工具.用该工具登录FTP并把服务器上面的数据下载到本地电脑.
二.在本地电脑点开始-运行.输入mstsc按确定.在弹出的窗口出点选项-点"本地资源"-点"详细信息".把本地磁盘前面的方框勾选上.然后再连接服务器.登录服务器以后打开"我的电脑".在里面可以访问到你本地电脑的磁盘分区.直接把服务器磁盘上的内容复制到本地电脑磁盘即可.
三.登录服务器.把上面需要复制的内容打压缩包.然后通过发邮箱附件的功能把压缩包发到你的另一个邮箱.然后在本地电脑登录收件的邮箱.并把附件下载到本地电脑即可.
❿ 用python实现FTP功能
开发环境:
1、操作系统: Windows 10 X64
2、Pycharm 2020.2.1
新建项目后,创建两个包 ftp_client与ftp_server,分别代表客户端与服务端。
该项目的完成主要借助了python提供的socketserver库来进行连接。
本项目实现了客户端对于服务端D://文件夹的增加文件,删除文件,修改文件功能。分别以put,delete,modify表示。
对于client,实现了最基础的交互功能,用户可以用如put test.txt等命令来实现功能。修改文件,用户首先输入modify z.txt 命令,z.txt是D://文件夹中已经存在的文件,再根据提示,输入想修改的内容即可修改成功。
在这一模块中,将重点介绍我在实现项目的过程中遇到的问题。
1、bytes与str的转换,传输以字节流进行,但是输出部分内容要以str形式,注意转换
2、熟悉python的语法
3、熟悉文件相关操作
4、考虑传输文件过大的情况
该问题不影响项目的正常使用,但未找到较好的解决办法