使用Python或Shell来应对这个挑战

问题描述 投票:0回答:1

对于此挑战,任务是读取包含带扩展名的文件名列表的文本文件,并确定每行哪些名称是唯一的,忽略文件扩展名。

例如,考虑以下文本文件:

foo.mp3|bar.txt|baz.mp3wub.mp3|wub.mp3|wub.mp3|wub.txt|wub.pngquux.mp3|quux.txt|thud.mp3

此文件的预期输出是

foo.mp3|bar.txt|baz.mp3thud.mp3

删除扩展名后,第 1 行中的所有三个名称都是唯一的,因此整行未更改。

但是,删除第二行的扩展名后,所有 wub 文件都不是唯一的,因此根本不包含在输出中。

对于第三行,删除扩展名后,名为 quux 的文件不是唯一的,并且会从输出中删除。 thud.mp3 是唯一的并且包含在输出中。注释

文本文件中的文件名严格由字母数字组成,并带有一个句点。不涉及任何路径。分隔符始终是管道。每条线路应独立于其他线路运行;没有逻辑从一行延续到另一行。文件不会超过 500 行,并且行永远不会超过 100 个字符。

我无法使用 python 修复它。

我的代码:

def find_unique_filenames(text):
    result = []

    for line in text.split('\n'):
        unique_names = set()
        filenames = line.strip().split('|')

        for filename in filenames:
            name_without_extension = filename.split('.')[0]
            unique_names.add(name_without_extension)

        result_line = '|'.join(unique_names)
        result.append(result_line)

    return '\n'.join(result)

# Uncomment the next line if you want to test this module independently
# print(find_unique_filenames("foo.mp3|bar.txt|baz.mp3\nwub.mp3|wub.mp3|wub.mp3|wub.txt|wub.png\nquux.mp3|quux.txt|thud.mp3"))

python shell filenames
1个回答
0
投票
unique_names = set()
...
unique_names.add(name_without_extension)

这样使用

set
会导致重复的元素变成单个元素,而您应该找到只出现一次的元素。

如果您正在使用以下数据,请考虑以下简单示例

A|B|C|C|C|D|E

如果您的任务是寻找不同的元素,答案是

A|B|C|D|E

如果您的任务是查找恰好出现一次的元素,那么答案是

A|B|D|E

您可以使用

collections.Counter
来计算元素。

© www.soinside.com 2019 - 2024. All rights reserved.