1

/mnt/data/wherever/%Y-%m-%d.txtLinux上のPythonでは、ローカルファイルシステムパス(または~/data/bla.txt)とSSH「パス」(user@host1:/data/bla.txtまたは)を区別する必要がありますuser@host2.mydomain.com:blupp.txt

どうすれば効率的にそれを行うことができますか?

編集:私の例では、 etcは単なるプレースホルダー/mnt/data/wherever/%Y-%m-%d.txtであるため、ファイルはありません。%Yそのため、指定された名前のファイル/ディレクトリが存在するかどうかを確認することはできません。

4

2 に答える 2

2

sshパスも有効なファイル名であるため(非常に奇妙なものですが)、知る唯一の方法はヒューリスティックを使用することです。

scpドキュメントから:

ファイル名には、ファイルがそのホストとの間でコピーされることを示すユーザーとホストの指定が含まれる場合があります。ローカルファイル名は、絶対パス名または相対パス名を使用して明示的にすることができ、「:」を含むファイル名をホスト指定子としてscpが処理することを回避できます。

したがって、それらが明示的なパスとして開始されているかどうか、または適切な場所にコロンが含まれていないかどうかを確認してください。次に、それがローカルパスであると想定します。それ以外の場合は、リモートパスであると想定します。

例:

pattern = '(\.?/|/)|(^:?[^:]*$)'
re.match(pattern, ":home/test") # match, is a local path
re.match(pattern, "user@host:blah") # no match
于 2013-03-15T10:34:58.307 に答える
0

あなたはこれを行うことができます-

  1. 最初にローカルファイルシステムでパスXをチェックインします(これは-のようなパスを考慮しますuser@host1:/data/bla.txt)。
  2. パスXがローカルファイルシステムに存在しない場合は、SSHパスYを確認します(「@」と「:」を追加で確認します。そうでない場合、そのファイルはどのマシンにも存在しません)。

globを使用して、パターンに基づいてファイルを一覧表示します。

>>> import glob
>>> glob.glob('/mnt/data/wherever/*.txt')   # all txt files within the directory will be listed

os.path.isfile(path)Trueパスが既存の通常のファイルである場合に戻ります。したがって、これは、ファイルがすでに存在し、ワイルドカードをサポートしていないかどうかを確認するために使用されます。globします。パスがローカルファイルシステムの既存のファイルであるかどうかを確認するには、次を使用します。

于 2013-03-15T10:28:04.557 に答える