gpt4 book ai didi

python - 在Python中读取目录和子目录中的所有文件

转载 作者:太空狗 更新时间:2023-10-29 20:38:43 26 4
gpt4 key购买 nike

我正在尝试用 python 翻译这个 bash 行:

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”以不显示音频播放器和非图形用户界面应用

我想要的结果是(例如):

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:

关于python - 在Python中读取目录和子目录中的所有文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25868109/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com