在Python中对列表进行分区

use*_*089 3 python list

我想了解如何修改列表的内容,特别是已经返回的文件名os.listdir().

文件名包含许多重复的名称,后跟下划线,后缀,然后是文件扩展名.我正试图将列表中的元素剪切到文件名的第一部分,然后'_':

apple_d.jpg
apple_si.jpg
apple_sg.jpg
Run Code Online (Sandbox Code Playgroud)

变成列表中的单个条目,'apple'.

我能够摆脱重复并重新用字母表来表示

list(sorted(set(t)))
Run Code Online (Sandbox Code Playgroud)

但从下划线开始摆脱一切都证明是棘手的.我尝试过这样做.rpartition("_")[0].但这显然不适用于列表.所以我想知道如何解决这个问题?

编辑:好吧,不在这里工作.仍然有重复,没有分裂.

objects = os.listdir(dir)





    for object in objects:
        sorted(set(object.split('_', 1)[0]))
        cmds.menuItem(label = object, parent = "objectMenu")
Run Code Online (Sandbox Code Playgroud)

(最后一个命令是maya命令,它填充选项菜单).现在很累,所以我不得不稍后再讨论.但非常感谢迄今为止的帮助.一定要尽快得到这个.

Mar*_*ers 5

使用str.split()str.rsplit()使用限制,然后选择第一个元素:

filename.split('_', 1)[0]
Run Code Online (Sandbox Code Playgroud)

.rsplit('_', 1)将在最后一个下划线.split()上分开,第一个.选择最适合您用途的产品.

这将为您提供该文件名的第一个或最后一个下划线之前的所有内容.

在集合理解中使用它,sorted()从该集合返回一个列表:

unique_prefixes = sorted({filename.split('_', 1)[0] for filename in os.listdir(somedir)})
Run Code Online (Sandbox Code Playgroud)

对于Python 2.6及更早版本,您还没有集合理解语法,以下生成器表达式set()也可以使用:

unique_prefixes = sorted(set(filename.split('_', 1)[0] for filename in os.listdir(somedir)))
Run Code Online (Sandbox Code Playgroud)