如何在同一行上返回类似的文件名
问题描述:
我在这里有点新手,所以请裸机...我为我的工作编写了一个程序来返回文件名和持续时间,所以我可以轻松地将它们添加到电子表格。我想要在同一行上返回类似的文件名,以便我可以一次复制整行相同的文件。如何在同一行上返回类似的文件名
这是到目前为止我的代码:
import os, wave
def main():
directory = input("What is the directory? ")
for file in sorted(os.listdir(directory)):
if file.endswith(".wav"):
with wave.open(file, 'rb') as f:
frames = f.getnframes()
rate = f.getframerate()
total_seconds = frames/float(rate)
minutes = total_seconds/60
seconds = total_seconds % 60
hours = minutes/60
minutes = minutes % 60
duration = '%.2d:%.2d:%.2d' % (hours, minutes, seconds)
print(file[:-4], duration)
main()
它返回:
sa-01003-32-su01-pm 00:04:41
sa-01003-32-su02-pm 00:02:20
sa-01003-32-su03-pm 00:09:50
sa-01003-32-su05-pm 00:09:41
sa-01003-32-su06-pm 00:10:15
sa-01003-32-su07-pm 00:09:49
sa-01003-32-su08-pm 00:01:05
sa-01003-33-su01-pm 00:04:04
sa-01003-33-su03-pm 00:02:09
sa-01003-33-su04-pm 00:09:45
sa-01003-33-su05-pm 00:09:39
sa-01003-33-su06-pm 00:10:30
sa-01003-33-su07-pm 00:09:56
sa-01003-33-su08-pm 00:01:05
所以我想对所有的“32”文件和持续时间是在一条线,分离只有空格以及下一行的'33'文件和持续时间等。
答
为了回答你的问题,我创建了一个字典(包含文件名及其相应的持续时间)和一个列表(包含文件名):它们都由main()函数返回。接下来,我创建了一个函数,根据您的需要打印值。简而言之,函数检查列表中的名称是否具有相同的前缀(例如,'sa-01003-32-):如果是,则名称及其相应的持续时间(来自字典)将打印在由a空间。如果没有,则打印新的一行。下面是代码:
def main():
directory = input("What is the directory? ")
dic_file={} # A dictionary that will store the file names and their duration
list_file=[] # A list of the file names (needs to contain the same names that are present in the dictionary)
for file in sorted(os.listdir(directory)):
if file.endswith(".wav"):
with wave.open(file, 'rb') as f:
frames = f.getnframes()
rate = f.getframerate()
total_seconds = frames/float(rate)
minutes = total_seconds/60
seconds = total_seconds % 60
hours = minutes/60
minutes = minutes % 60
duration = '%.2d:%.2d:%.2d' % (hours, minutes, seconds)
list_file.append(file)
dic_file.setdefault(file,duration)
return dic_file,list_file #return the dictionary and the list
def print_value(dic_file,list_file):
list_file.sort()
for n,item in enumerate(list_file):
while True:
if n<len(list_file)-1:
if list_file[n+1][:-11]==item[:-11]:
print(item,dic_file[item],end=' ')
else:
print(item,dic_file[item]+'\n')
break
print(list_file[len(list_file)-1],dic_file[list_file[len(list_file)-1]])
dic_file,list_file=main()
print_value(dic_file,list_file)
答
import os, wave
def main():
directory = input("What is the directory? ")
current = None
similar = []
for file in sorted(os.listdir(directory)):
if file.endswith(".wav"):
with wave.open(file, 'rb') as f:
frames = f.getnframes()
rate = f.getframerate()
total_seconds = frames/float(rate)
minutes = total_seconds/60
seconds = total_seconds % 60
hours = minutes/60
minutes = minutes % 60
duration = '%.2d:%.2d:%.2d' % (hours, minutes, seconds)
txt = file[:-4] + " " + duration
value = file.split("-")[3]
if not current == None:
if value == current:
similar.append(txt)
else:
print(" ".join(similar))
similar = []
else:
current = value
similar.append(txt)
main()
它未经测试,但它应该工作。
请记住,该脚本只适用于包含用破折号分隔的值的文件名。
更好,我发现这对我来说最合适。非常感谢你的帮助,你不知道你救了我的麻烦! – SandyBeach