J'ai un fichier texte qui me demande de le lire en binaire et d'écrire en binaire. Aucun problème. Je dois masquer les numéros de sécurité sociale avec Xs, assez facile normalement:Python regex un fichier texte de fichier binaire - comment utiliser une gamme de nombres et de limites de mots?
text = re.sub("\\b\d{3}-\d{2}-\{4}\\b","XXX-XX-XXXX", text)
Ceci est un exemple du texte que je suis l'analyse syntaxique:
more stuff here CHILDREN�S 001-02-0003 get rid of that stuff goes here not001-02-0003 but ssn:001-02-0003
et je dois tourner dans ceci:
more stuff here CHILDREN�S XXX-XX-XXXX get rid of that stuff goes here not001-02-0003 but ssn:XXX-XX-XXXX
super! Alors maintenant j'essaye d'écrire cette même regex 'en binaire'. Voici ce que j'ai et il est « fonctionne », mais il ne se sent mince alors pas bien du tout:
line = re.sub(b"\\B(\x000|\x001|\x002|\x003|\x004|\x005|\x006|\x007|\x008|\x009)(\x000|\x001|\x002|\x003|\x004|\x005|\x006|\x007|\x008|\x009)(\x000|\x001|\x002|\x003|\x004|\x005|\x006|\x007|\x008|\x009)\x00-(\x000|\x001|\x002|\x003|\x004|\x005|\x006|\x007|\x008|\x009)(\x000|\x001|\x002|\x003|\x004|\x005|\x006|\x007|\x008|\x009)\x00-(\x000|\x001|\x002|\x003|\x004|\x005|\x006|\x007|\x008|\x009)(\x000|\x001|\x002|\x003|\x004|\x005|\x006|\x007|\x008|\x009)(\x000|\x001|\x002|\x003|\x004|\x005|\x006|\x007|\x008|\x009)(\x000|\x001|\x002|\x003|\x004|\x005|\x006|\x007|\x008|\x009)\\B", b"\x00X\x00X\x00X\x00-\x00X\x00X\x00-\x00X\x00X\x00X\x00X", line)
Notes:
- cette ordure dans CHILDRENS, dois garder comme ça
- doivent limite de mot, donc la 4ème ligne ne soit pas masqué
ne devrait pas mon regex une gamme de numéros au lieu? Je ne sais pas comment faire cela en binaire. Et mes limites de mots ne fonctionnent que en arrière comme \ B au lieu de \ b, euh .. qu'est-ce qui se passe avec ça?
MISE À JOUR: J'ai aussi essayé ceci:
line = re.sub(b"[\x30-\x39]", b"\x58", line)
et qu'il fait pour chaque numéro, mais si je tente de faire encore quelque chose de simple comme:
line = re.sub(b"[\x30-\x39][\x30-\x39]", b"\x58\x58", line)
ne correspond plus à rien, aucune idée pourquoi?
Il y a une pile de caractères de type 'cassé' donc j'ai besoin de le traiter comme binaire. Certains sont en UTF-8 mais les gens ont des bobinages bloqués et ce qui ne l'est pas et en raison des besoins de l'entreprise (tuez-moi), j'ai besoin de garder les caractères éclatés et simplement dépouiller les SSN. Si j'opte pour l'encodage UTF-8, je commence à avoir toutes sortes d'erreurs d'encodage. – sniperd
spécifiquement avec la corbeille que je reçois: UnicodeDecodeError: codec 'utf-8' ne peut pas décoder octet 0xff en position 0: octet de démarrage invalide – sniperd
@sniperd: Mis à jour, cela fonctionne pour vous? Je récupère les mêmes caractères indésirables dans 'test2.txt' ici. – Jan