• Python——操作smb文件服务器(上传和下载)


    最近在做上传和下载,然后文件比较大和多,就用到了文件服务器,文件服务器是实体机 ,不是在本地, 然后用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, file_name):
    '''
    上传文件
    :param f_names:文件名
    :param service_name:服务名(smb中的文件夹名)
    :param smb_dir: smb文件夹
    :param local_dir: 本地文件夹
    :return:
    '''
    self.samba.storeFile(service_name, smb_dir, file_name)

    def createDir(self, service_name, path):
    """
    创建文件夹
    :param service_name:
    :param path:
    :return:
    """
    try:
    self.samba.createDirectory(service_name, path)

    except OperationFailure:
    pass

    def retrieveFiles(self,name, path, file):
      """
      查看文件大小
      """
    file_attr, filesize = self.samba.retrieveFile(name,path, file)
    return file_attr, filesize


     

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

    上传和下载差不多

    #下载文件到本地
         f = open('本地文件','w')  #就是要下载下来存放的那个文件的壳子
        samba.retrieveFile('共享空间','服务器文件地址',f)  #它会把文件写在f里面
        f.close()
        #上传文件到服务器
         f = open('本地文件','r')
        samba.storeFile('共享空间','服务器文件地址',f)
        f.close()
     
    #调用查看数据大小
    file_name = samba_temp.all_file_names_in_dir('hswjerp', 'erp/medium/海外版/海外电影/视频字幕/2019/07/26/十品官吴山羊')
    a = 'erp/medium/海外版/海外电影/视频字幕/2019/07/26/十品官吴山羊'
    # os.path.dirname():去掉脚本的文件名,返回目录。
    # print(fielname)
    objfile = tempfile.NamedTemporaryFile()
    for i in file_name:
    file,filesize = samba_temp.retrieveFiles('hswjerp',join(a,i), objfile)
    print(file,filesize)

    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下载到本地

  • 相关阅读:
    Kubernetes 弹性伸缩全场景解析 (四)- 让核心组件充满弹性
    15分钟在笔记本上搭建 Kubernetes + Istio开发环境
    idea 插件的使用
    jQuery获取select元素选择器练习
    【Maven】添加ueditor到maven本地仓库
    jQuery序列化乱码解决
    Linux安装RedHat
    MyBatis SQL xml处理小于号与大于号
    js判断数据类型
    基于SSM框架的通用权限框架设计
  • 原文地址:https://www.cnblogs.com/yuanfang0903/p/11169729.html
Copyright © 2020-2023  润新知