私はこのbash行をPythonで翻訳しようとしています:
find /usr/share/applications/ -name "*.desktop" -exec grep -il "player" {} \; | sort | while IFS=$'\n' read APPLI ; do grep -ilqw "video" "$APPLI" && echo "$APPLI" ; done | while IFS=$'\n' read APPLI ; do grep -iql "nodisplay=true" "$APPLI" || echo "$(basename "${APPLI%.*}")" ; done
その結果、Ubuntuシステムにインストールされているすべてのビデオアプリが表示されます。
->/usr/share/applications /ディレクトリにあるすべての.desktopファイルを読み取ります
->文字列「video」「player」をフィルタリングしてビデオアプリケーションを検索します
->文字列「nodisplay = true」と「audio」をフィルタリングして、オーディオプレーヤーとGUIなしのアプリを表示しないようにします
私が欲しい結果は(例えば)です:
kmplayer
smplayer
vlc
xbmc
だから、私はこのコードを試しました:
import os
import fnmatch
apps = []
for root, dirnames, filenames in os.walk('/usr/share/applications/'):
for dirname in dirnames:
for filename in filenames:
with open('/usr/share/applications/' + dirname + "/" + filename, "r") as auto:
a = auto.read(50000)
if "Player" in a or "Video" in a or "video" in a or "player" in a:
if "NoDisplay=true" not in a or "audio" not in a:
print "OK: ", filename
filename = filename.replace(".desktop", "")
apps.append(filename)
print apps
しかし、再帰ファイルに問題があります...
どうすれば修正できますか?ありがとう
os.walk()
ループを正しく行っていないようです。ネストされたdirループは必要ありません。
正しい例については、Pythonマニュアルを参照してください:
https://docs.python.org/2/library/os.html?highlight=walk#os.walk
for root, dirs, files in os.walk('python/Lib/email'):
for file in files:
with open(os.path.join(root, file), "r") as auto: