【问题标题】:Sorting movie titles into CSV将电影标题排序为 CSV
【发布时间】:2016-09-15 03:20:02
【问题描述】:

我家里有一个媒体服务器,我创建了一个脚本,它可以提取所有文件名并在将它们放入 CSV 之前对其进行排序。我唯一的问题是它对字母数字进行排序,但从电影标题的角度来看,我想忽略“A”、“An”和“The”。有没有办法忽略这些字符串并在不实际更改 CSV 中的文件名的情况下正常进行排序?

【问题讨论】:

    标签: sorting powershell csv


    【解决方案1】:

    是的,您可以按任何属性对多个对象进行排序,如果没有一个属性是您想要的,那么您可以向Sort-Object 提供一个脚本块,其中包含一些代码“对每个对象执行 xyz”,它会根据脚本块的输出对它们进行排序——这只会用于排序,不会改变任何东西。

    因此,使用您想要的任何代码计算不带前导词A, An, The 的名称。在这里,我正在使用正则表达式进行烹饪,因为它快速、美味并且默认情况下会进行不区分大小写的匹配:

    Get-ChildItem | Sort-Object -Property { $_.Name -replace '^(A|An|The).' }
    

    但是你可以用厨房周围的简单食材做一些同样有效的事情:

    Function Mangle-FilmName
    {
        param($file)
    
        $name = $file.Name.ToLower()
    
        if ($name.startswith('an'))
        {
            $name.Substring(4)
        }
        elseif ($name.startswith('the')
        {
            $name.Substring(5)
        }
        ...
        else 
        {
            $name
        }
    }
    
    Get-ChildItem | Sort-Object -Property Mangle-FilmName
    

    或者使用switch 语句或在单词数组上循环,和/或/等等。

    【讨论】:

    • 不知何故我从来不知道脚本块选项。感谢那。正则表达式不应该是这样的吗 - '^(A |An |The )' - 不过?或者甚至这个 - '^(A *|An *|The *)'
    • @JasonBoyd 很好,我在想'^(A|An|The) ' 但忘了把空格放在最后。我已将其编辑为 .,因此它将匹配任何后续字符,从 DAXaholic 中窃取了它可能是 the_name_here.mpg 之类的名称而不是空格的想法。
    • 这只会从 OP 未明确提及的文件名的开头删除名称 - DAX 的回答会解决这个问题。但是目前只有 OP 知道需要什么 :)
    • @tengobash 如果它们位于文件名的末尾,则它们不会更改排序顺序。而且我不想将Attack of the clones 之类的电影名称与中间的the 分开,因为在中间忽略短词进行排序对我来说似乎很奇怪。但谁知道呢,没有例子就意味着一个模糊的答案。
    • 非常感谢您的帮助!经过测试,看起来正确的正则表达式是@JasonBoyd 指出的'^(A |An |The )'
    【解决方案2】:

    您可以使用以下内容。
    由于缺少示例数据,我不知道您的文件名的结构(单词分隔符等),但您可以根据需要自定义以下代码。代码本质上是通过分隔符'_'' ''.' 拆分基本文件名,过滤掉您忽略的单词('The''A''An' 等)并重新连接这些部分到单个字符串。
    请注意,在此结束时,文件名在没有初始单词分隔符的情况下进行比较(即'The_Blue_House.mpg''The.Blue.House.mpg' 将被视为相同),恕我直言,这是一件好事,但您的需求可能会有所不同。

    希望有帮助


    $wordSeparator = '_| |\.'
    $ignoredWords = @(
        'The'
        'A'
        'An'
        # add more
    )
    
    filter sortableFileName {
        ($_ -split $wordSeparator | ? { $_ -notin $ignoredWords }) -join ''
    }
    
    Get-ChildItem | Sort-Object { $_.BaseName | sortableFileName } # | Export-CSV
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-21
      • 1970-01-01
      • 2020-02-14
      • 1970-01-01
      • 1970-01-01
      • 2018-05-25
      • 1970-01-01
      • 2015-03-30
      相关资源
      最近更新 更多