2016-09-30 6 views
2

Hier ist, was ich getan habe:Entfernen Sie alle Klammern und ersetzen Sie alle Leerzeichen durch Unterstriche?

import re 
def demicrosoft (fn): 

    fn = re.sub('[()]', '', fn) 
    for ch in [' ']: 
     fn = fn.replace(ch,"_"+ch) 
    return fn 
print(demicrosoft('a bad file name (really)')) 


>>> (executing lines 1 to 12 of "<tmp 2>") 
a_ bad_ file_ name_ really 

Es gibt Räume mit den Unterstrichen. Wie kann ich es reparieren?

+1

Warum fügen Sie den Raum zurück '' _ '+ ch' - 'ch' ist ein Leerzeichen? Meinst du nicht nur '' _'- da du versuchst das '' '' durch '' _'' zu ersetzen und 'ch' ist ein' '' '. – AChampion

+1

Warum nicht einfach 'return re ('[()]', '', fn) .replace ('', '_')' – thefourtheye

+0

Warum sind Leerzeichen, Klammern und eckige Klammern im Dateinamen schlecht? Sie sind alle gültigen Dateinamen in modernen Dateisystemen. – Anthon

Antwort

2

Sie können die Kette nur eine Reihe von replace s dafür:

a = 'a bad file name (really)' 

>>> a.replace('(', '').replace(')', '').replace(' ', '_') 
'a_bad_file_name_really' 
1

entfernen ch von "_" + ch in Aufruf ersetzen

import re 
def demicrosoft (fn): 

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

folgt können Sie tun dies mit str.translate():

>>> table = str.maketrans({'(':None, ')':None, ' ':'_'}) 
>>> 'a bad file name (really)'.translate(table) 
'a_bad_file_name_really' 
Verwandte Themen