我写简单的脚本使用诱变库,其中计数文件夹中的音频文件量和文件夹的整个音频播放时间(包括子文件夹的音频文件)。
import os,sys
from datetime import datetime,timedelta
from mutagen.mp3 import MP3
from mutagen.flac import FLAC
from mutagen.aac import AAC
from mutagen.aiff import AIFF
from mutagen.asf import ASF
audio_ext={"mp3":lambda x: MP3(x).info.length,
"aac":lambda x: AAC(x).info.length,
"wmv":lambda x: ASF(x).info.length,
"wma":lambda x: ASF(x).info.length,
"asf":lambda x: ASF(x).info.length,
"flac":lambda x: FLAC(x).info.length,
"aiff":lambda x: AIFF(x).info.length,}
def scan_lib(path):
playtime = 0
audio_files = 0
for root,dirs,files in os.walk(path,followlinks=False):
for f in files:
try:
playtime += audio_ext[f[len(f)-f[::-1].index('.'):]](os.path.join(root,f))
audio_files += 1
except (KeyError,ValueError):
pass
for d in dirs:
dir_playtime,dir_audios = scan_lib(os.path.join(root,d))
playtime +=dir_playtime
audio_files += dir_audios
print("\nLibrary:",path)
print("Amount of audio files:",audio_files)
print("Total playing time:\nDays\tHours\tMin\tSec\n%d\t%d\t%d\t%d\n" % convert_pt(playtime))
return playtime,audio_files
def convert_pt(sec):
t = datetime(1,1,1) + timedelta(seconds=int(sec))
return t.day-1, t.hour,t.minute,t.second
main_path = sys.argv[1]
playtime,audio_files = scan_lib(main_path)
经过一些测试,我发现我的脚本访问了一些文件夹两次。通常这些目录是另一个子文件夹中的子文件夹。结果它打印了这样的结果:
$ python3 music_scan.py
Library: ~/Music/
Amount of audio files: 3520
Total playing time:
Days Hours Min Sec
9 7 30 26
但实际上,如果将所有音频曲目移动到一个文件夹中,并在该测试文件夹上运行脚本,则会显示不同的结果:
$ python3 music_scan.py ~/test
Library: ~/test/
Amount of audio files: 885
Total playing time:
Days Hours Min Sec
2 15 49 9
实际上,测试文件夹中的音频曲目数量是885。我用ls | wc-l
命令检查了它,那么为什么os.walk()会访问一些子文件夹两次呢?
os.walk
已经递归地遍历整个目录树。
但是,您可以递归地调用方法scan_lib
:
def scan_lib(path):
...
for root,dirs,files in os.walk(path,followlinks=False):
...
for d in dirs:
dir_playtime,dir_audios = scan_lib(os.path.join(root,d))
...
使用os.listdir
而不是os.walk
并保留递归调用,或者简单地删除dirs:中以开头的d的4行。
问题内容: 我需要列出文件夹中包含目录路径的所有文件。我尝试使用,这显然是完美的解决方案。 但是,它还会列出隐藏的文件夹和文件。我希望我的应用程序不列出任何隐藏的文件夹或文件。有没有可以用来使其不产生任何隐藏文件的标志? 跨平台对我而言并不是很重要,如果只适用于linux(。*模式)就可以了 问题答案: 不,没有选择会跳过这些。您需要自己这样做(这很容易): 注意切片分配;递归遍历中列出的子目录。
我刚刚开始使用JSP,遇到了一个问题。 据我所知,WEB-INF下的JSP页面可以通过浏览器在localhost中使用URL进行访问: 但是,如果我在WEB-INF文件夹(即'MyFolder')中创建另一个子文件夹,并尝试通过URL访问相同的JSP页面: 它给出了一个错误404。JSP文件导航系统与HTML文件导航系统有区别吗? 编辑:我正在使用servlet来显示我的JSP页面: EDIT2:
我正在使用path标准(使用maven war)将webapp部署到tomcat instalation目录。问题是我在webapp路径和浏览器中有一个javascript文件夹,我无法访问该文件夹。我已经检查了文件是否创建到正确的文件夹,他们在那里! 如果我尝试在浏览器上运行 给我“404页未找到”错误。 如果我把js文件夹放在根目录(而不是标准目录)中,一切都正常。
我正在从主类访问资源文件夹中的文件 我收到了这个错误: 我甚至打开了jar文件,remoteUnitsIdsInOldServer.txt文件就在那里,在类内部
我试图做一个Python代码,遍历父文件夹中的所有子文件夹,并将子文件夹内容移动到父文件夹。我在python中使用os.walk函数,但它也一直选择父文件夹中的文件。有没有办法解决这个问题...
我有一个资源文件夹/包在我的项目的根,我"不"想要加载某个文件。如果我想加载某个文件,我会使用class.getResourceAsStream,我会没事的!!我实际上想做的是在资源文件夹中加载一个“文件夹”,循环该文件夹中的文件,并获得每个文件的流,并在内容中读取...假设在运行时之前没有确定文件名...那我该怎么办?有没有一种方法来获得一个文件夹中的文件列表在您的jar文件?请注意,带有资源的