##[Python]Windowsサーバー内のファイルダイアログを出してファイルを指定し、それをローカルにコピーする方法
pip install pathlib tkinter
- Windowsサーバーのパス名を扱えるようにするため、pathlibパッケージ
- ダイアログボックスを出させるため、tkinterパッケージ
を、あらかじめインストールしておく。
Windowsサーバー内のダイアログを開き、ファイルを選んで置きたい場所にコピー(絶対パス指定).py
# モジュールのインポート
import os, tkinter, tkinter.filedialog, tkinter.messagebox
import pathlib
import shutil
# pathlib.WindowsPath(r の rオプション によって、わざわざ \\ と書かなくてよくなる。
# これで、WindowsPCであれば ローカル/社内サーバー に関わらず、絶対パスをそのまま指定して通用する。
# ダイアログを開いたときに見せたい場所
sDir = pathlib.WindowsPath(r'\\Server-01\管理\日報')
# 貼り付けたい場所
dDir = pathlib.WindowsPath(r'C:\Users\UserName\Desktop\週次処理')
# ファイル選択ダイアログの表示
root = tkinter.Tk()
root.withdraw()
# 選びたいファイル種類を指定する
fTyp = [("エクセルファイル","*.xls?")]
copyfile = tkinter.filedialog.askopenfilename(filetypes = fTyp,initialdir = sDir)
# 最後にコピーして終了
shutil.copy2(copyfile, dDir)
[処理環境]
・Windows8.1 64bit
・Python3.7.4
【参考】Qiita: Python:処理ファイルをGUIから選択する方法
を参考にしました。@chanmaruさんのソースが相対パス仕様だったのを、絶対パス仕様にしたのが今回の記事です。
どうしても絶対パスの方が使いやすかったので、相対パスから絶対パスに変えたのですが、エラーの連続で苦心しました。
「pathlib.WindowsPath(r の rオプション によって、わざわざ \ と書かなくてよくなる」ということが分かってから、やっと解けました。
ExcelVBAのやり方に比べて、どれだけラクか・・・。@chanmaruさんには感謝しかありません😄