如何将带有空格,括号等的文件名解析为变量? 实施例
'Album Artist - Song name (feat Musician) [Year]'
到
'Album\ Artist\ \- Song\ name\ \(feat\ Musician\)\ \[Year\]'
我使用re.escape(filename)
获得了正确的格式。但是,如果我将re.escape
中的打印存储到变量中,则会将其反转为初始命名。我知道我可以使用"string".replace('x', 'y')
方法。但它对我来说并不安全。
有人知道如何解决这个问题或解决这个问题吗? 使用Python 3.5.3 btw。
编辑示例代码:
>>> import re
>>> # this is an example array in the format how my filenames are named stored in files >>> files = ['AA - BB (CC) [DD]', 'EE - FF (GG) [HH]', 'II - JJ (KK) [LL]']
>>> for f in files:
... print(f)
...
AA - BB (CC) [DD]
EE - FF (GG) [HH]
II - JJ (KK) [LL]
>>> for f in files:
... print(re.escape(f))
...
AA\ \-\ BB\ \(CC\)\ \[DD\] # desired format
EE\ \-\ FF\ \(GG\)\ \[HH\]
II\ \-\ JJ\ \(KK\)\ \[LL\]
>>> escaped = re.escape(files[0])
>>> escaped
'AA\\ \\-\\ BB\\ \\(CC\\)\\ \\[DD\\]' # actual result
>>>
答案 0 :(得分:2)
你的变量没问题。尝试单独使用print(escaped)
而不是escaped
。
答案 1 :(得分:2)
潜在的问题听起来像是传递可能包含需要作为参数转义到另一个程序的字符的文件名。我建议看一下subprocess
。
具体来说,请参阅frequently used arguments:
所有调用都需要
args
,并且应该是字符串或一系列程序参数。 通常首选提供一系列参数,因为它允许模块处理任何必需的转义和引用参数(例如,允许文件名中的空格)。如果传递单个字符串,则shell必须为True(参见下文),否则字符串必须简单地命名要执行的程序而不指定任何参数。
例如:
import subprocess
file_names = [r'AA - BB (CC) [DD]', r'EE - FF (GG) [HH]', r'II - JJ (KK) [LL]']
for file_name in file_names:
subprocess.call([r'touch', file_name])