【问题标题】:Removing part of character of filename [closed]删除文件名的部分字符[关闭]
【发布时间】:2020-03-14 17:21:50
【问题描述】:

我正在尝试删除特定字符后的部分文件名。

当前文件名:

KM_003__Rheihe 4~DEL~389948.pdf
KM_004__Reite 2 und Reite 3~DEL~391098.pdf
KM_008__Grundriss~DEL~391042.pdf

我想要的;

KM_003__Rheihe 4.pdf
KM_004__Reite 2 und Reite 3.pdf
KM_008__Grundriss.pdf

文件位于 C:\users\%username%\rename

任何帮助/指针将不胜感激

【问题讨论】:

  • 到目前为止你尝试过什么?为什么它不起作用?
  • 你试过什么?你有什么问题?请向我们展示您的代码。
  • 您是否要求重命名文件 - 删除 '~' 和 '.' 之间的所有章程(不包括'.')?
  • 另外,问题被标记为“perl”、“java”、“python”和“bash”——你在寻找什么样的解决方案?
  • 好吧,你在 bash 中有标签 bash 你可以使用子字符串删除 - 这会更容易,不需要外部工具。 tldp.org/LDP/abs/html/string-manipulation.html

标签: java python bash perl cmd


【解决方案1】:

我会使用indexOf() 方法来定位~ 符号并使用substring() 方法来剪切~ 之前的部分,或者将~ 之后的部分替换为空。

然后我会重命名文件或创建一个具有正确名称的新文件并将旧文件的内容复制到新文件中。

【讨论】:

    【解决方案2】:

    你现在可以直接使用这段代码了,

    import re
    import os
    filenames = os.listdir(r'C:\Users\Asus\Desktop\\')
    for filename in filenames:
        os.rename(r'C:\Users\Asus\Desktop\\'+ filename,r'C:\Users\Asus\Desktop\\'+ re.findall('([A-Za-z0-9_ ]*)~',filename)[0] +'.pdf')
    

    【讨论】:

    • 如何定义文件名,我有超过200000个文件
    • 我已经编辑了答案,它将获取所有文件的名称并重命名它们。
    【解决方案3】:

    这是我的方法更改您想要的目录的路径。

    import os
    import glob
    
    path = 'c:\\rename'
    
    files = [f for f in glob.glob(path + "**/*.pdf", recursive=True)]
    
    for f in files:
        try:
            new = f.split('~')[0].replace(path,'').strip()
            os.rename(r'{}'.format(f), r'{}\{}.pdf'.format(path,new))
        except:
            print('cannot be renamed')
    

    【讨论】:

    • 我收到一个错误文件“C:\Users\NN\Desktop\Split\split.py”,第 8 行路径 = 'C:\Users\NN\Desktop\Split\\' ^ SyntaxError : (unicode error) 'unicodeescape' 编解码器无法解码位置 2-3 中的字节:截断 \UXXXXXXXX 转义
    • 让我编辑一下,可能是因为它读取的 pdf 文件中没有 '~' 字符
    • 再试一次代码
    • 我再试一次,文件“C:\Users\NN\Desktop\Split\split.py”,第 9 行路径 = 'C:\Users\NN\Desktop\Split' ^ SyntaxError: ( unicode 错误)“unicodeescape”编解码器无法解码位置 2-3 中的字节:截断 \UXXXXXXXX 转义
    • 您是否在路径上使用了双反斜杠? C:\\Users\\NN\\Desktop\\Split
    【解决方案4】:

    所以你想删除一个波浪号('~'),然后是'DEL',另一个波浪号和一个或多个数字的序列。

    在 Perl 中,这将是:

    s/~DEL~\d+//;
    

    将其放入完整的测试程序中:

    #!/usr/bin/perl
    
    use strict;
    use warnings;
    
    while (<DATA>) {
      s/~DEL~\d+//;
      print;
    }
    
    __DATA__
    KM_003__Rheihe 4~DEL~389948.pdf
    KM_004__Reite 2 und Reite 3~DEL~391098.pdf
    KM_008__Grundriss~DEL~391042.pdf
    

    输出是:

    KM_003__Rheihe 4.pdf
    KM_004__Reite 2 und Reite 3.pdf
    KM_008__Grundriss.pdf
    

    【讨论】:

    • 请问您是如何定义 DATA 的?
    • @Henri2:DATA 文件句柄只是一个快速的技巧,可用于演示我在此处所做的解决方案。它返回可以在 Perl 代码底部的 __DATA__ 标记之后找到的数据。显然,您可以使用任何适当的机制来读取您的数据。
    猜你喜欢
    • 2018-07-18
    • 1970-01-01
    • 2017-01-31
    • 2017-12-30
    • 1970-01-01
    • 2017-04-08
    • 1970-01-01
    • 2014-01-23
    • 1970-01-01
    相关资源
    最近更新 更多