2017-02-21 4 views
0

私は、SFTP上のpythonのparamikoモジュールを使用してファイルを送信しようとしています。問題は私のスクリプトがファイルパス全体を知ることができないことです。例えば、ここで私はからファイルを取得しようとしているローカルパスです:paramiko sftpのローカルファイルパスでのPython正規表現の一致

\\buildserver\builds\1.2.34.45.78910_01JAN17\filename.txt 

は、問題は、私はそれだけを以下の日時(第3フォルダ(1.2.34.45.78910_)の最初の部分を持っていないということです01JAN17)。これを回避するために、私は正規表現を使用してフォルダ名の最初の部分にマッチさせようとしています。ファイルputsftp_client.pyファイルに入力されますので、正規表現をこの関数の入力として渡す方法はありますか?

例入力:

buildNumber = "1.2.34.45.78910" 
localFilePath = "\\\\buildserver\\builds\\" + "re.match(r\"^{0}\")".format(buildNumber) + "\\filename.txt" 
sftp.put(localFilePath, remoteFilePath) 

出力例:

WindowsError: [Error 3] The system cannot find the path specified: '\\\\buildserver\\builds\\re.match(r"^1.2.34.45.78910")\\filename.txt' 

私はrefnmatchモジュールの両方を使用してみましたが、彼らは彼らの両方が取るので、私は必要な機能を持っていないようです正規表現に加えて入力として一致させる文字列。

ファイルパスの途中で正規表現が一致しない場合は、別の方法でこれをどのように達成できるかについてのご意見をいただければ幸いです。

+0

あなたは、例えば、入力と出力を提供することができます?細部が不明確に見える – depperm

+0

確かに、私はオリジナルの投稿を編集しました。 – Qwix

+0

正規表現の代わりにhttp://stackoverflow.com/a/15313024/3462319を使用する可能性があります – depperm

答えて

0

deppermのコメントで述べたように、これはregexを使うのではなく、os.path.isdirを使って開始パスで始まり、私が探しているビルド番号を含むディレクトリを検索することで解決できます。ここで

は、(複数の一致がstackoverflow.com/a/15313024/3462319を見るために、これは、あなただけの1つの試合を探していると仮定している)のコードスニペットです:

path1 = "\\\\buildserver\\builds" 

for i in os.listdir(path1): 
    if os.path.isdir(os.path.join(path1,i)) and numberReplaced in i: 
     path2 = i 

path1 += "\\" + path2 + "\\filename.txt" 
sftp.put(path1, remoteFilePath)