Posted at

python:ローカルファイルをtimestampでソートしてscpで転送

More than 1 year has passed since last update.


概要

・ローカルファイルをtimestampでsortする。

・ついでに、先日書いたparamiko+scpで共有サーバにファイル転送するとマージしてみる


経緯

先日、paramiko+scpで共有サーバにファイル転送するでローカルファイルをscpで転送するプログラムを書いたのですが、Pythonの勉強もかねてローカルファイルをtimestampでsortするプログラムを書いたのでこれとマージしてみようと思います。


やってみた

1.sorted()関数を定義してlambda式を使う

<ソート前>

['test1.txt', 'test10.txt', 'test2.txt', 'test3.txt', 'test4.txt', 'test5.txt', 'test6.txt', 'test7.txt', 'test8.txt', 'test9.txt']

<コード>


local.py

import os 

localpath = r"C:\test

def sorted_ls(localpath):
mtime = lambda m: os.stat(os.path.join(localpath, m)).st_mtime
return list(sorted(os.listdir(localpath), key=mtime))

print(sorted_ls(localpath))


<ソート後>

['test1.txt', 'test10.txt', 'test2.txt', 'test3.txt', 'test4.txt', 'test5.txt', 'test6.txt', 'test8.txt', 'test9.txt', 'test7.txt']

lambda式の理解は今後するとして、今回はkeyにmtime(最終更新日時)を使ってsortしてみました。

※ctimeでも良いかもですが、mtimeのほうがソースとして多かったのでこちらを採用。

2.マージ


ssh.py

#-*- coding:utf-8 -*-

import paramiko
import scp
import os

localpath = 'localpath'
remotepath = 'remotepath'

def sorted_ls(localpath):
mtime = lambda x: os.stat(os.path.join(localpath, x)).st_mtime
return list(sorted(os.listdir(localpath), key=mtime))

files = sorted_ls(localpath)

with paramiko.SSHClient() as ssh:
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname=hostname, port=22, username=username, password=password)

with scp.SCPClient(ssh.get_transport()) as scp:
for f in files:
scp.put(localpath + f,remotepath)
os.remove(localpath + f)


これで処理は完了です。withをネストすることでsshをログインしたままでscpの処理をループで行うことができます。


参照文献

Pythonのリスト(配列)で、文字列の日付(日時)を基準にソートしようとしたときの、備忘録

ソート HOW TO

ythonでファイルの一覧を取得して作成日時でソートする方法

pythonのsorted関数で使われるlambdaとは何なのか