admin管理员组文章数量:1794759
【Python】smb共享服务器(共享盘)文件上传与下载
在局域网或者外网中,需要上传文件到smb共享服务器时,Python的实现如下:
一、安装pysmb包使用pip命令安装pysmb包,pysmb包是支持smb协议的文件管理模块,默认是不带的,需要自行安装这个包。 安装pysmb的命令(终端下运行):
pip install pysmb 或pip3 install pysmb
一个是python2的,一个是python3的。
pip是python包管理工具,如果找不到pip命令,需要先安装pip,一般默认已安装。
二、登录到smb服务器先导入smb包:
from smb.SMBConnection import SMBConnection
登录smb服务器代码示例:
#!/usr/local/bin/python3 from smb.SMBConnection import SMBConnection host="xxx.xxx.xxx.xxx" #ip或域名,改成你自己的 username="xxxxxx" #用户名,改成你自己的 password="xxxxxx" #密码,改成你自己的 conn=SMBConnection(username,password,"","",use_ntlm_v2 = True) result = conn.connect(host, 445) #smb协议默认端口445 print("登录成功") 三、上传文件到smb服务器 localFile=open("本地文件路径","rb") #rb代表read+binary模式,即“读二进制文件” #打开本地文件,注意如果是二进制文件,比如zip包,需要加上参数b,即binary模式,默认是t模式,即text文本模式。 #示例:localFile=open("/Users/devnn/Desktop/test.zip","rb") conn.storeFile("共享文件夹名称","存放路径",localFile) #“共享文件夹名称”是一个文件夹,即你使用smb共享的那个文件夹。“存放路径”是相对共享文件夹下的文件。 #上传文件到smb服务器,默认超时30秒,可以添加参数修改:timeout=xx。 #示例:conn.storeFile("test","test1/test2/test3.zip",localFile) localFile.close() #关闭 print("上传成功")注意,上传二进制文件时,如果打开本地文件没有加上参数b,会抛出异常: UnicodeDecodeError: 'utf-8' codec can't decode byte 0xbc in position 2: invalid start byte 这是因为文件被当作文本文件,二进制文件无法转码成普通字符。因此需要改成二进制文件读取。
四、从smb服务器下载文件到本地下载文件,需要将open()函数第二个参数修改成写模式:
localFile=open("下载后的文件路径","wb") #写二进制文件“下载后的文件路径”,是一个文件路径,不是文件夹路径。比如:"/Users/devnn/Desktop/test.zip",文件不存在会自动创建。
完整代码如下:
localFile=open("下载后的文件路径","wb") #创建本地文件,注意是下载二进制文件,比如zip包,需要加上参数b,即binary模式,默认是t模式,即text文本模式。 #示例:localFile=open("/Users/devnn/Desktop/test.zip","wb") conn.retrieveFile("共享文件夹名称","文件所在路径",localFile) #从smb服务器下载文件到本地,默认超时30秒,可以修改:timeout=xx。“文件所在路径”是相对共享文件夹的路径,不需要加"/". #示例:conn.retrieveFile("test","test1/test2/test3.zip",localFile) localFile.close() #关闭 print("下载成功")版权声明:本文标题:【Python】smb共享服务器(共享盘)文件上传与下载 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1686907031a116804.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论