2012-03-09 9 views
0

誰かのパスがこのように見えるファイルを見ようとしています。中間のディレクトリが不明なディレクトリから、Pythonでファイルを取得する

/foo/{{number}}/{{unknown}}/bar 

は、私が知っている{{番号}}ですが、私は{{}}不明であるかわからないが、私はそれらの一方のみが存在することを知っています。

iはls

このような
ls /foo/1231/*/bar 

シェルコマンドを使用するとき、私は私が望む結果を得る、数は1231であると言うことができます、例えば、それは私がしたい、

/foo/1231/some_name/bar 

を出力しますpythonを使ってこのファイル名を取得することはできますが、すべての試みは失敗しました。私が最初に試したことは、

os.listdir("/foo/1231/*/bar") 

だったが、それは何のディレクトリ/foo/1231/*/barがないことを不平を言います。 私はgithub.com/amoffat/pbsのpythonモジュールを使ってみましたが、それも同様のエラーをスローします。

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/usr/local/lib/python2.7/site-packages/pbs.py", line 449, in __call__ 
    return RunningCommand(command_ran, process, call_args, actual_stdin) 
    File "/usr/local/lib/python2.7/site-packages/pbs.py", line 140, in __init__ 
    if rc != 0: raise get_rc_exc(rc)(self.command_ran, self._stdout, self._stderr) 
pbs.ErrorReturnCode_1: 

Ran: '/bin/ls /foo/123/*/bar' 

STDOUT: 



STDERR: 

    /bin/ls: /foo/123/*/bar: No such file or directory 

私はその後subprocess.check_outputを使用してみましたが、同じエラーが発生しました。

次に、os.system( "ls/foo/123/*/bar")を使って試しました。これは意味のある結果を表示します。私はそれをキャプチャする方法がありません。os.systemChanges to sys.stdin, etc. are not reflected in the environment of the executed command.

誰も私が望むものを得る方法を知っていますか?おかげで

答えて

2

2つの方法は自分自身を示唆しています。

本当に唯一の1つの中間のディレクトリがある場合、あなたはそのようにそれを抽出することができます。

beginning = '/foo/1231' 
mid = os.path.listdir(beginning)[0] 
fullpath = os.path.join(beginning, mid, 'bar') 

それとも、glob標準モジュールを使用することができます

fullpath = glob.glob('/foo/1231/*/bar')[0] 
関連する問題