2016-10-03 51 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解決

相關問題