2016-10-03 53 views
0

这是我做的。我知道这绝对是错误的。我想知道如何使这个工作?谢谢!如何用下划线替换所有空格并删除所有括号而不使用replace()函数?

import re 
def demicrosoft (fn): 

"""Clean up a file name. 

Remove all parentheses and replace all spaces by underscores. 

Params: fn (string): 
Returns: (string) clean version of fn 
""" 

fn = re.sub('[()]', '', fn) 
for ch in ['']: 
    fn = fn.translate(ch, "_") 
return fn 

print(demicrosoft('Quercus stellata (26).jpg')) 
+2

究竟是不是工作,你有什么期待呢? –

+0

它说有一个TypeError:translate()只需要一个参数(给出2) – amflynn

+0

这应该被添加到你的问题,因为这是你真正想问的问题。另外,解释一下你“关于1个参数,但是你给了2个”的疑惑。 –

回答

1

可以使用join与发电机组合是迭代的人物在你的字符串,同时处理与下划线过滤掉括号和更换的空间逻辑:

PARENS = {'(', ')'} 

def demicrosoft(string): 
    return ''.join('_' if c == ' ' else c for c in string if c not in PARENS) 

print(demicrosoft('Quercus stellata (26).jpg')) # Quercus_stellata_26.jpg 
+0

这是最好的版本恕我直言 –

1
import re 
def demicrosoft (fn): 
    return '_'.join((''.join(re.split(r'[()]', fn)).split())) 
0

从禅Python:可读性计数!

def demicrosoft (fn): 
    dest = "" 
    for char in fn: 
     if char == ' ': 
      dest += '_' 
     elif char not in '()': 
      dest += char 
    return dest 
0
newString = re.sub("([\s\(\)])",lambda m:"_" if b.group(0) not in "()" else "",targetString) 

即时猜测它的性能的原因,他们希望O(N)发电机表达应该工作...这里是re解决

相关问题