首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python -动态更改regex不匹配列表中的所有模式

Python -动态更改regex不匹配列表中的所有模式
EN

Stack Overflow用户
提问于 2016-11-20 09:47:26
回答 1查看 66关注 0票数 0

因此,最终的目标是整理一些有声读物轨道,当我的电脑被撕毁时,这些音轨会被随意地扔到文件夹中。

我首先用相同的号码把所有的音轨分开。最后,我知道我将需要用户的输入,以决定哪些光盘得到的音轨号码,他们都不共享,但我也可以快速工作。

我以前用过regex,所以我想,我得到了这个,但是我不知道为什么下面的代码不再匹配编号6和7的曲目,唯一的区别是没有3条。

我也不确定我是否正确地使用了for循环。

所有需要的代码都在下面。

底部的“打印轨迹”命令应该按顺序打印所有文件,"print file_names“应该是空的,但这两种情况都不是真的。

我明白了:

代码语言:javascript
运行
复制
[['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']

为什么第二个打印的列表没有完全按照第一个排序呢?

任何帮助都会是巨大的。

代码语言:javascript
运行
复制
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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-20 10:55:59

代码中的这一行有一个问题:

代码语言:javascript
运行
复制
    for file in file_names:

在计算期间更新file_names时,此循环的行为是不可预测的。

下面是sortfiles例程的一个工作变体(删除了一些不必要的代码):

代码语言:javascript
运行
复制
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)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40702627

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档