Python——操作smb文件服务器(上传和下载) - 可靠的企业级http代理/socks5代理IP服务平台

1,724 阅读2分钟
原文链接: www.qingtingip.com

最近在做上传和下载,然后文件比较大和多,就用到了文件服务器,文件服务器是实体机 ,不是在本地, 然后用python 通过pysmb模块就可以直接进行操作

mac选择前往、连接服务器去查看文件服务器里都有什么

pysmb

 安装:sudo pip install pysmb
使用 from smb.SMBConnection import * class SMBClient(object): ''' smb连接客户端 ''' user_name = '' passwd = '' ip = '' prot = None status = False samba = None def __init__(self, user_name, passwd, ip, port=139): self.user_name = user_name self.passwd = passwd self.ip = ip self.port = port def connect(self): try: self.samba = SMBConnection(self.user_name, self.passwd, '', '', use_ntlm_v2=True) self.samba.connect(self.ip, self.port) self.status = self.samba.auth_result except: self.samba.close() def disconnect(self): if self.status: self.samba.close() def all_file_names_in_dir(self, service_name, dir_name): ''' 列出文件夹内所有文件名 :param service_name: :param dir_name: :return: ''' f_names = list() for e in self.samba.listPath(service_name, dir_name): #if len(e.filename) > 3: (会返回一些.的文件,需要过滤)
        if e.filename[0] != '.': f_names.append(e.filename) return f_names def download(self, f_names, service_name, smb_dir, local_dir): ''' 下载文件 :param f_names:文件名 :param service_name:服务名(smb中的文件夹名) :param smb_dir: smb文件夹 :param local_dir: 本地文件夹 :return: ''' assert isinstance(f_names, list) for f_name in f_names: f = open(os.path.join(local_dir, f_name), 'w') self.samba.retrieveFile(service_name, os.path.join(smb_dir, f_name), f) f.close()
  
  
def upload(self, service_name, smb_dir): ''' 上传文件 :param f_names:文件名 :param service_name:服务名(smb中的文件夹名) :param smb_dir: smb文件夹 :param local_dir: 本地文件夹 :return: ''' cur_path = os.path.dirname(os.path.realpath(__file__)) log_path = os.path.join(cur_path, 'downloads') a= [] for file in os.listdir(log_path): f = open(os.path.join(log_path, file), 'rb') self.samba.storeFile(service_name, os.path.join(smb_dir, file), f) f.close()

 



 

优缺点:函数功能丰富,文件下载功能只对普通文件如txt,dat,csv有效,压缩文件无效

上传和下载差不多

 

#下载文件到本地      f = open('本地文件','w')  #就是要下载下来存放的那个文件的壳子     samba.retrieveFile('共享空间','服务器文件地址',f)  #它会把文件写在f里面     f.close()     #上传文件到服务器      f = open('本地文件','r')     samba.storeFile('共享空间','服务器文件地址',f)     f.close()

fs.smbfs

 安装:sudo pip2 install fs.smbfs
使用

    import fs.smbfs
    smb = fs.smbfs.SMBFS(host='****', username='****', passwd='***')
    smb.opendir('***')
    for e in smb.listdir():
        print e
    smb.close()

 优缺点:host属性中直接输入ip无效,报错fs.errors.CreateFailed: could not get IP/host pair from '*.*.*.193',包的作者目前也没有解决这个问题。

pysmbclient

安装:sudo pip2 install pysmbclient
使用:

    import smbclient

    smb = smbclient.SambaClient(server='*.*.*.103', username=u'***', password='***', share=u'数据共享/')
    for e in smb.listdir(u'/'):
        smb.download(os.path.join(u'/', e), os.path.join('~/smb', e))
    smb.close()

优缺点:可以完成普通文件和压缩文件从samba下载到本地