2017-08-02 7 views
0

は、誰も私に言うことができる理由は、このコマンドの機能:一貫性のないglob.glob結果

lefs = glob.glob(".\lef\*.lef") 

が、このdoesntの?

techFiles = glob.glob(".\techfile\*.tcl") 

私はそれを動作させるために余分なバックスラッシュを追加する必要があります。

techFiles = glob.glob(".\\techfile\*.tcl") 

他のラインは、余分なバックスラッシュと正常に動作します。.. これらは異なる拡張子を持つ単純なファイルです。

すべてのファイルが存在し、正しいディレクトリにあります。 techFiles = glob.glob(".\techfile\*.tcl")

+3

'\ t'はタブです文字はグロブがスキャンするものがないので –

+1

バックスラッシュに特別な意味を持たせたくない場合は 'r'''を使います。 –

+0

ありがとう!わかった。 – Icee

答えて

0

\tを集計チャー(他の「問題の文字...私はいくつかを忘れることがあり、数字が続く\b\v\a\x\b\f\U\ある)

として解釈されます

だから、パスが無効であるとglob.glob戻り値なし。

あなたの他のパスは任意のエスケープsequencに対応していない\l\*が含まれていますe、それは解釈されず、作品の種類。

常に生の接頭辞を使用し、Windowsのパスとして文字列リテラルを渡すために、それはそれぞれのバックスラッシュをエスケープするよりも簡単です:

techFiles = glob.glob(r".\techfile\*.tcl") 

若干オフトピック:コード例の多くは資産ディレクトリ名とここにあります:元glob.glob(".\Techfile\Backlog\*.tcl") Windowsパスが大文字と小文字を区別しないので、ほとんどの人がこの\tの問題を解決せずに回避策を見つけることができます。

+0

ちょうど、Windowsは完全にスラッシュを使用してパスセグメントを分割しています。そうすれば、すべての不安が解消されます。 – kindall

+0

@kindall 'glob'の場合は真ですが、DOSコマンドの場合(システムコールを実行しているとき)、"/"はオプションであるので、バックスラッシュを使用する必要があります。また、文字通りのパスを貼り付けることは、エスケープしたりスラッシュに変換することを避けることです。 –

+0

ありがとうございました!私はそれを考えなかったでしょう! – Icee

関連する問題