2017-06-06 2 views
-1

Problème:Python alphanumérique

Je dois passer par fichier texte qui a des lignes de chaînes et de déterminer sur chaque ligne si elle est alphanumérique ou non. Si la ligne est imprimé alphanumérique par exemple « 5345m345ö34l est alphanumérique »

Exemple du fichier texte:

5345m345ö34l 

no2no123non4 

%#""SGMSGSER 

Mon code est le suivant:

file = open('file.txt','r') 
data = file.readlines() 

for i in data: 
    i.strip() 
    if (i.isalnum()): 
     print (i, 'is alphanumeric') 
    else: 
     print (i, 'not alphanumeric') 
    file.close() 

Nous pouvons voir que la première et la deuxième ligne est alphanumérique mais le programme ne fonctionne pas?

+1

'data = file.read()' –

+3

Essayez: 'i = i.strip()' (comme des chaînes sont _immutable_ et leurs méthodes ne fonctionnent pas sur leurs données internes, mais plutôt retourner d'autres chaînes). Et aussi, corrige ton indentation. – CristiFati

+1

Comment ça ne marche pas? Recevez-vous des erreurs? Obtenez-vous une sortie inattendue? – PrestonM

Répondre

0

essayer et voir si ce travail -

file = open('file.txt','r') 
data = file.readlines() 

for i in data: 
    stripped_line = i.strip() 
    if (stripped_line.isalnum()): 
     print (stripped_line, 'is alphanumeric') 
    else: 
     print (stripped_line, 'not alphanumeric') 
file.close() 
+1

Oui, c'est exactement ce que je cherchais. Chaque ligne devait être dépouillée car elle contenait un espace à la fin qui ne fait pas partie de l'alphanumérique. Ce que j'ai mal fait n'était pas de stocker la variable dépouillée dans une variable. Merci pour votre réponse! –

0

EDIT

À partir de votre message original que vous voulez traiter des caractères latins (à savoir ceux avec des accents) comme entrée alphanumérique valide. Pour ce faire, vous devez charger le fichier d'origine en Unicode et lors du test des qualités alphanumériques, vous devez convertir les lettres accentuées en alphabétique normal. Cela fera que:

# -*- coding: utf-8 -*- 
import unicodedata 
import codecs 

file = codecs.open('file.txt','rb', encoding="utf-8") 
data = file.readlines() 
for i in data: 
    i = i.strip() 
    converted_data = ''.join((c for c in unicodedata.normalize('NFD', i) if unicodedata.category(c) != 'Mn')) 
    if (converted_data.isalnum()): 
     print (i, 'is alphanumeric') 
    else: 
     print (i, 'not alphanumeric') 
file.close() 
+0

Si l'indentation était le problème, elle ne fonctionnerait même pas. –

+0

Ce n'est probablement pas le problème, mais nous pouvons seulement partir du message original et si le poster copie mon code directement dans leur terminal, ils doivent noter toutes les différences. – TLOwater

+0

Nous n'avons pas besoin de 'readlines' ici. Un fichier est itérable, donc 'for i in file:' suffirait et il pourrait gérer les fichiers qui ne rentrent pas dans la mémoire de l'ordinateur. – Matthias