Python——操做smb文件服務器(上傳和下載)

最近在作上傳和下載,而後文件比較大和多,就用到了文件服務器,文件服務器是實體機 ,不是在本地, 而後用python 經過pysmb模塊就能夠直接進行操做python

mac選擇前往、鏈接服務器去查看文件服務器裏都有什麼服務器

pysmb

 安裝:sudo pip install pysmb
使用app

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有效,壓縮文件無效函數

上傳和下載差很少spa

 

#下載文件到本地
     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
使用code

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
使用:server

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

相關文章
相關標籤/搜索