130 votes

Comment puis-je supprimer les caractères non ASCII tout en laissant les points et les espaces ?

Je travaille avec un fichier .txt. Je veux une chaîne de caractères contenant le texte du fichier, sans caractères non ASCII. Cependant, je veux laisser les espaces et les points. Pour l'instant, je les supprime également. Voici le code :

def onlyascii(char):
    if ord(char) < 48 or ord(char) > 127: return ''
    else: return char

def get_my_string(file_path):
    f=open(file_path,'r')
    data=f.read()
    f.close()
    filtered_data=filter(onlyascii, data)
    filtered_data = filtered_data.lower()
    return filtered_data

Comment dois-je modifier onlyascii() pour laisser les espaces et les points ? J'imagine que ce n'est pas trop compliqué mais je n'arrive pas à comprendre.

2voto

Matthew Dunn Points 127

Je travaille sur Fluent Python (Ramalho) - fortement recommandé. Liste de comprehension des "one-ish-liners" inspirés par le chapitre 2 :

onlyascii = ''.join([s for s in data if ord(s) < 127])
onlymatch = ''.join([s for s in data if s in
              'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'])

1voto

joaquin Points 22450

Si vous voulez des caractères ascii imprimables, vous devriez probablement corriger votre code en :

if ord(char) < 32 or ord(char) > 126: return ''

ce qui est équivalent, à string.printable (réponse de @jterrace), sauf pour l'absence de retours et de tabulations ( \t ',' \n ',' \x0b ',' \x0c et \r ) mais ne correspond pas à l'intervalle de votre question.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X