【Python】smb共有サーバー(共有ディスク)ファイルのアップロードとダウンロード
ローカルエリアネットワークまたは外部ネットワークでsmb共有サーバにファイルをアップロードする必要がある場合、pythonの実装は以下の通りです.
一、pysmbパッケージのインストール
pipコマンドを使用してpysmbパッケージをインストールします.pysmbパッケージはsmbプロトコルをサポートするファイル管理モジュールです.デフォルトでは持たないので、自分でこのパッケージをインストールする必要があります.pysmbをインストールするコマンド:
pipはpythonパッケージ管理ツールで、pipコマンドが見つからない場合はpipをインストールする必要があります.一般的にはデフォルトでインストールされています.
二、smbサーバーにログインする
smbパッケージをインポートするには、次の手順に従います.
ログインsmbサーバコードの例:
三、smbサーバーにファイルをアップロードする
なお、バイナリファイルをアップロードする場合、ローカルファイルを開いてパラメータbを付けないと、
四、smbサーバーからファイルをローカルにダウンロードする
ファイルをダウンロードするには、open()関数の2番目のパラメータを書き込みモードに変更する必要があります.
「ダウンロード後のファイルパス」は、フォルダパスではなくファイルパスです.たとえば、「/Users/devnn/desktop/test.zip」では、ファイルが存在しないと自動的に作成されます.
完全なコードは次のとおりです.
一、pysmbパッケージのインストール
pipコマンドを使用してpysmbパッケージをインストールします.pysmbパッケージはsmbプロトコルをサポートするファイル管理モジュールです.デフォルトでは持たないので、自分でこのパッケージをインストールする必要があります.pysmbをインストールするコマンド:
pip install pysmb
またはpip3 install pysmb
一つはpython 2で、一つはpython 3です.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()関数の2番目のパラメータを書き込みモードに変更する必要があります.
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(" ")