2017-07-12 2 views
1

Je suis le traitement, avec python, une longue liste de données qui ressemble à ceciPython: comment se débarrasser des caractères non-ascii en cours de lecture d'un fichier

data screenshot

Les digrammes sont probablement dues à problèmes d'encodage. (Je ne suis pas sûr que ces caractères seront conservés dans ce site)

29/07/2016 04:00:12 0.125143  

Maintenant, quand je lis ce fichier dans un script en utilisant quelque chose comme open et readlines, il y a une erreur, la lecture

SyntaxError: EOL while scanning string literal 

Je connais (ou je peux rechercher l'utilisation de) fonctions remplacer et regex, mais je ne peux pas les faire dans mon script. Le plus gros problème est que partout où j'inclus ou lis ce caractère étrange, une erreur se produit, pointant sur la ligne même où il est lu. Donc, je ne peut rien faire pour eux.

+0

ceux-ci pourraient vous aider https://stackoverflow.com/questions/64749/m-character-at-end-of-lines https://stackoverflow.com/questions/16695950/how-to-read-windows-file-in-linux-environment –

Répondre

0

Je trouve que les re.findall œuvres. (Je suis désolé, je n'ai pas le temps de tester toutes les autres méthodes, car l'importance de ce travail a disparu, et j'oublie même cette question elle-même.)

def extract_numbers(str_i): 
    pat="(\d+)/(\d+)/(\d+)\D*(\d+):(\d+):(\d+)\D*(\d+)\.(\d+)" 
    match_h = re.findall(pat, str_i) 
    return match_h[0] 

# .... 
# `f` is the handle of the file in question 
lines =f.readlines() 
for l in lines: 
    ls_f =extract_numbers(l) 
    # process them.... 
1

Êtes-vous en train de lire un fichier? Si oui, essayez d'extraire des valeurs en utilisant des expressions rationnelles, ne pas supprimer des caractères supplémentaires:

re.search(r'^([\d/: ]{19})', line).group(1) 
re.search(r'([\d.]{7})', line).group(1) 
+0

Merci de donner plus d'informations , mais désolé je n'ai pas le temps de tester complètement cela (mais je vous ai upvoted). – Aminopterin