2017-07-25 13 views
1

Windowsパスを使用し、拡張環境変数を環境変数に置き換えるPythonライブラリはありますか?例えば環境変数を使用してWindowsパスをパスに変換する

C:\Users\Username\Documents\Text.txt -> %USERPROFILE%\Documents\Text.txt 
C:\Windows\System32\cmd.exe -> %WINDIR%\System32\cmd.exe 
C:\Program Files\Program\Program.exe -> %PROGRAMFILES%\Program\Program.exe 

も要件となり、異なる言語の

os.path.expandvars('some path with environment variables') 

サポートの反対を行う機能を得ることであろう説明するための最良の方法。

C:\Archivos de programa\Progra\Program.exe -> %PROGRAMFILES%\Program\Program.exe 
+2

を、私はそれが可能だとは思わない、あるいは少なくともそれがありますあいまいな環境変数へのディレクトリの1対1マッピングがあるとは言いません。言い換えれば、私は '%FOO%'と '%BAR%'の両方を両方とも 'C:\ Windows'に展開することができます。 – CoryKramer

+0

['winshell'](https://winshell.readthedocs.io/)モジュール、特に[特別なフォルダ](https://winshell.readthedocs.io/en/latest/special-folders.html)モジュールがあります。特別なフォルダのいくつかをつかむ部分。それ以外の場合は、Win32 APIを使用する必要があります。それでは、あなたのパスが特別なフォルダと交差しているかどうかを確認し、それを正規の_environment変数_名に置き換えるだけです。そのために 'os.path'を使うことができます。 – zwer

+0

@CoryKramerは、既知の既定のWindows環境変数にマップするだけで、新しいものは必要ありません。 –

答えて

1

これは、環境変数は、あなたの文字列の部分と一致しているよりももっとので、些細な問題である(例:PROCESSOR_LEVELは通常一桁であるので、あなたはそれを避ける必要があります)。最高の効率性を確保するために、私は希望:このような

  • ソート既存の環境変数L

import os 

my_string = os.path.normpath(r"D:\Users\JOTD\AppData\Roaming\Adobe\Flash Player") 


for k,v in sorted(os.environ.items(),key=lambda x:len(x[1]),reverse=True): 
    my_new_string = my_string.replace(v+os.sep,"%{}%{}".format(k,os.sep)) 
    if my_string != my_new_string: 
     break 
    my_string = my_new_string 

print(my_new_string) 
関連する問題