Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如果;部分[数字].rar“数字”;存在于文件名中_Python_Regex_Rename - Fatal编程技术网

Python 如果;部分[数字].rar“数字”;存在于文件名中

Python 如果;部分[数字].rar“数字”;存在于文件名中,python,regex,rename,Python,Regex,Rename,因此,我希望开发一个脚本来返回一个包含文件名和扩展名的双重文件,这样我就可以更改名称中的文件名(大写、删除点、破折号等),然后只需添加扩展名就可以了(在某个时候,我希望能将其与GUI结合起来) 我不确定这样做的最佳方式是什么,但我希望它采用扩展名(last.ext),除非文件名以“part[any number digits,any number of zero from 1-any number].rar”结尾,然后将最后两个部分作为“extension” 我不确定这种具体的方法。但是,我确实

因此,我希望开发一个脚本来返回一个包含文件名和扩展名的双重文件,这样我就可以更改名称中的文件名(大写、删除点、破折号等),然后只需添加扩展名就可以了(在某个时候,我希望能将其与GUI结合起来)

我不确定这样做的最佳方式是什么,但我希望它采用扩展名(last.ext),除非文件名以“part[any number digits,any number of zero from 1-any number].rar”结尾,然后将最后两个部分作为“extension”

我不确定这种具体的方法。但是,我确实需要它集成到当前脚本中(集成到我将用于其他所有内容的同一脚本中),并且我知道它需要以我有一个双重名称ext pair结束

我当前的代码:

import os, shutil, re
def rename_file (original_filename):
    name, extension = os.path.splitext(original_filename)    
    name = re.sub(r"\'", r"", name) # etc...more of these...
    new_filename = name + extension
    try:
        # moves files or directories (recursively)
        shutil.move(original_filename, new_filename)
    except shutil.Error:
        print ("Couldn't rename file %(original_filename)s!" % locals())
[rename_file(f) for f in os.listdir('.') if not f.startswith('.')]

如何将带有.rar的“part[digits]”作为“ext”的一部分而不是名称的一部分?

您可以在正则表达式中执行此操作,而不是使用
splitext

m = re.search(r'(.*?)((part\[\d+\])?\.rar)', original_filename)
name, ext = m.groups()[:2]
例如:

>>> m = re.search(r'(.*?)((part\[\d+\])?\.rar)', 'name_part[23].rar')
>>> m.groups()[:2]
('name_', 'part[23].rar')


这假设扩展名实际上是
.rar
。如果不是这样的话,调整正则表达式很容易。

我如何将“部分[数字]”添加到扩展名而不是名称。谢谢,但您能告诉我如何调整它以与所有扩展名一起使用吗?只需将“rar”更改为“.*”。仍有一些极端情况会失败(例如,如果文件名仅为“.rar”?),会发生什么情况),但您必须决定如何处理它们,以及是否需要。这看起来可能是一个供个人使用的实用程序脚本,在这种情况下,角点大小写可能不是问题。我建议您阅读有关正则表达式的帮助。
>>> m = re.search(r'(.*?)((part\[\d+\])?\.rar)', 'name_no_parts.rar')
>>> m.groups()[:2]
('name_no_parts', '.rar')