LoginSignup
4
1

More than 5 years have passed since last update.

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

Posted at

概要

・ローカルファイルを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とは何なのか

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1