因此,最终的目标是整理一些有声读物轨道,当我的电脑被撕毁时,这些音轨会被随意地扔到文件夹中。
我首先用相同的号码把所有的音轨分开。最后,我知道我将需要用户的输入,以决定哪些光盘得到的音轨号码,他们都不共享,但我也可以快速工作。
我以前用过regex,所以我想,我得到了这个,但是我不知道为什么下面的代码不再匹配编号6和7的曲目,唯一的区别是没有3条。
我也不确定我是否正确地使用了for循环。
所有需要的代码都在下面。
底部的“打印轨迹”命令应该按顺序打印所有文件,"print file_names“应该是空的,但这两种情况都不是真的。
我明白了:
[['01. Track 1 (19).mp3', '01. Track 1 (20).mp3', '01. Track 1 (21).mp3'], ['02. Track 2 (21).mp3', '02. Track 2 (20).mp3', '02. Track 2 (19).mp3'], ['03. Track 3 (21).mp3', '03. Track 3 (20).mp3', '03. Track 3 (19).mp3'], ['04. Track 4 (19).mp3', '04. Track 4 (20).mp3', '04. Track 4 (21).mp3'], ['05. Track 5 (19).mp3', '05. Track 5 (20).mp3', '05. Track 5 (21).mp3']]
['07. Track 7 (19).mp3', '06. Track 6 (20).mp3', '06. Track 6 (19).mp3']为什么第二个打印的列表没有完全按照第一个排序呢?
任何帮助都会是巨大的。
import re
file_names = ['07. Track 7 (19).mp3', '01. Track 1 (19).mp3', '01. Track 1 (20).mp3', '01. Track 1 (21).mp3', '02. Track 2 (21).mp3', '03. Track 3 (21).mp3', '02. Track 2 (20).mp3', '04. Track 4 (19).mp3', '02. Track 2 (19).mp3', '04. Track 4 (20).mp3', '05. Track 5 (19).mp3', '05. Track 5 (20).mp3', '04. Track 4 (21).mp3', '06. Track 6 (20).mp3', '03. Track 3 (20).mp3', '05. Track 5 (21).mp3', '06. Track 6 (19).mp3', '03. Track 3 (19).mp3']
def compile_regex(num):
num_str = str(num)
regex = ".*track ?" + num_str + ".*"
track_test = re.compile(regex, re.I)
return track_test
def matchfiles(file_names,track_test):
matches = []
for track in file_names:
if track_test.search(track):
matches.append(track)
return matches
def removetracks(file_names,matches):
for track in matches:
file_names.remove(track)
return (file_names)
def sortfiles(file_names):
num = 1
tracks = []
track_test = compile_regex(num)
num_tracks = len(file_names)
for file in file_names:
matches = matchfiles(file_names,track_test)
if matches:
num += 1
track_test = compile_regex(num)
tracks.append(matches)
file_names = removetracks(file_names,matches)
print tracks
print file_names
if __name__ == "__main__":
sortfiles(file_names)发布于 2016-11-20 10:55:59
代码中的这一行有一个问题:
for file in file_names:在计算期间更新file_names时,此循环的行为是不可预测的。
下面是sortfiles例程的一个工作变体(删除了一些不必要的代码):
def sortfiles(file_names):
num = 0
tracks = []
while file_names != []:
num += 1
track_test = compile_regex(num)
matches = matchfiles(file_names, track_test)
if matches:
tracks.append(matches)
file_names = removetracks(file_names, matches)
print (tracks)
print (file_names)https://stackoverflow.com/questions/40702627
复制相似问题