使用Python,如何替换基于匹配的片段的部分路径?
我有一个路径看起来像:使用Python,如何替换基于匹配的片段的部分路径?,python,Python,我有一个路径看起来像:data/dev-noise-subtractive-250ms-1/1988/24833/1988-24833-0013.flac 我想做的是替换第二部分,使其成为data/dev clean/1988/24833/1988-24833-0013.flac。除了以dev-开头外,我不能保证第二部分有任何内容 我需要使它具有通用性,这样它就可以处理任意的stem,比如train-,等等 def replace_second_part(path, with_what):
data/dev-noise-subtractive-250ms-1/1988/24833/1988-24833-0013.flac
我想做的是替换第二部分,使其成为data/dev clean/1988/24833/1988-24833-0013.flac
。除了以dev-
开头外,我不能保证第二部分有任何内容
我需要使它具有通用性,这样它就可以处理任意的stem,比如train-
,等等
def replace_second_part(path, with_what):
parts = path.split('/')
parts[1] = with_what
return '/'.join(parts)
如果您希望使用os使其更具可移植性(例如在Windows下工作),则首选path
如果您希望使用
os使其更便于移植(例如,在Windows下工作)。首选path
。您可以使用re
将其匹配并替换为:
def func(pattern, file):
return re.sub(f'{pattern}[^/]+/', f'{pattern}clean/', file)
func('dev-', 'data/dev-noise-subtractive-250ms-1/1988/24833/1988-24833-0013.flac')
#data/dev-clean/1988/24833/1988-24833-0013.flac
func('train-', 'data/train-noise-subtractive-250ms-1/1988/24833/1988-24833-0013.flac')
#data/train-clean/1988/24833/1988-24833-0013.flac
func('train-', 'data/xxx/xxx/train-noise-subtractive-250ms-1/1988/24833/1988-24833-0013.flac')
#data/xxx/xxx/train-clean/1988/24833/1988-24833-0013.flac
您可以使用
re
将其匹配并替换为:
def func(pattern, file):
return re.sub(f'{pattern}[^/]+/', f'{pattern}clean/', file)
func('dev-', 'data/dev-noise-subtractive-250ms-1/1988/24833/1988-24833-0013.flac')
#data/dev-clean/1988/24833/1988-24833-0013.flac
func('train-', 'data/train-noise-subtractive-250ms-1/1988/24833/1988-24833-0013.flac')
#data/train-clean/1988/24833/1988-24833-0013.flac
func('train-', 'data/xxx/xxx/train-noise-subtractive-250ms-1/1988/24833/1988-24833-0013.flac')
#data/xxx/xxx/train-clean/1988/24833/1988-24833-0013.flac
但它并不总是
dev-
,我不知道它总是第二部分,你必须有一个确切的模式来做类似的事情,模式或一些总是有效的逻辑,你可以用这个想法来实现。现在,你的想法还不够清晰,你打算如何实施?这是我的问题。我想要一个函数,这样我就可以通过任何stem:dev-
,train-
,等等。它将匹配路径的相关部分,并替换为*-clean
,它是否总是从stem开始,并且始终是第二个目录/data/dev随便什么
/data/train something
很明显,它总是从阀杆开始,但不是第二个方向,但它不总是dev-
,我不知道它总是第二个部分。你必须有精确的模式来做类似的事情,模式或一些总是有效的逻辑,你可以通过这个想法来实现。现在,你的想法还不够清晰,你打算如何实施?这是我的问题。我想要一个函数,这样我就可以通过任何stem:dev-
,train-
,等等。它将匹配路径的相关部分,并替换为*-clean
,它是否总是从stem开始,并且始终是第二个目录/data/dev which
/data/train something很明显,它总是以stem开头,但不是第二个目录