効率化というほど効率よくなっているかは微妙ですが、仕事の合間にやってみました。
###概要
ファイルサーバからローカルにいくつかのファイルをコピーしてきます。ついでにディレクトリも作成します。
###背景
その日のタスク一覧を印刷して担当者に配るというとても新人らしい日次作業を割り当てられています。ローカルにディレクトリを作成して、ファイルサーバからそこにファイルをコピーするという準備が必要です。ちょろっとコードを書けばワンクリックで準備が終わるようになりそうだと思い、やってみました。
###本論
ローカルにyyyymmddという規則でその日分のファイルを入れるディレクトリを作ります。その後にファイルサーバからタスク一覧ファイルをコピーしてきます。
まずスクリプト実行時の時刻を取得し、それを基に年月日を文字列として得ます。
os.mkdir(path)
でディレクトリを作成。これで第一段階は終了。
次に、ファイルサーバのタスク一覧があるディレクトリのファイル一覧をos.listdir(path)
で取得します。
コピー対象のファイル名は先頭に共通した文字列【hoge】を持っているので、str.startswith(prefix)
で該当するファイルを探すことができます。
ファイル一覧はリストなので、ループで一つずつ回しながらファイルを探し、見つけ次第shutil.copy(src,dst)
でファイルサーバから作成したディレクトリへコピーします。
これにて日次作業の準備は完了です。後はちまちまと印刷したりするだけです。
#encode:utf-8
import os
import shutil
from datetime import datetime
if __name__ == "__main__":
#現在時刻を取得
today = datetime.now().strftime('%Y/%m/%d %H:%M:%S')
y = datetime.now().strftime('%Y')
m = datetime.now().strftime('%m')
d = datetime.now().strftime('%d')
#フォルダ名(yyyymmdd)
dirname = y + m + d
#フォルダ作成
os.mkdir(dirname)
#コピーしたいファイルがあるディレクトリ.
copydir = 'B:/foo/bar/baz/'
#ディレクトリに置かれたファイルの一覧を取得
files = os.listdir(copydir)
for n in range(len(files)):
#共通した文字列を持つファイルをyyyymmddフォルダにコピー
if files[n].startswith('【hoge】'):
print(files[n])
shutil.copy(copydir + files[n] , './' + dirname + '/' + files[n])
###[2016.10.01追記]
【修正】
明らかに間違っている箇所なのでencode:utf-8
→ encoding:utf-8
に修正しました。コメントでの指摘、ありがとうございました。
【悲報】
フェーズが進んだため日次作業は終了と言われました。
せっかく書いたコードですが、しばらく出番はなさそうです('ω')
とはいえ機能が単純なので他への応用もできるかもしれません。