J'ai un Dataframe que j'ai besoin d'écrire sur le disque, mais Pyspark n'autorise aucun de ces caractères Alors j'ai écrit un script simple pour détecter si cela se passe p> mais pour chaque en-tête, Cela a entraîné une erreur Je ne suis pas sûr de ce que je fais mal ici. P> PS: J'utilise Python3.7 P> P> ,; {} () \\ n \\ t = code> à présenter dans les en-têtes en écrivant comme fichier de parquet. Aucun code> a été imprimé. C'est faux parce que je sais que mon fichier a des espaces dans ses en-têtes.
Donc, j'ai décidé de vérifier en exécutant les couple de lignes suivantes p> Aucun code> être imprimé. P>
3 Réponses :
Le problème est que Ceci dit pour correspondre aux caractères littéraux em> que pyspark ne permet pas d'être présent dans le Les en-têtes. p> Si vous vouliez supprimer ces caractères, vous pouvez essayer d'utiliser {} code> ainsi que () code> sont des métacaraceurs de regex et ont une signification particulière. Peut-être que le moyen le plus simple d'écrire votre logique serait d'utiliser le motif: re. / code>: p>
Si vous souhaitez vérifier si un texte contient Un autre défaut dans votre regex est que dans les chaînes "normales" (pas r-strings )
Toute barre oblique inverse doit être alors changez votre regex à: p> ou utilisez r-string : P> [ code> et ] code>. r"[,;{}()\n\t= ]"
Droit. Merci. J'ai édité la question à inclure l'espace
Comme déjà expliqué, vous pouvez utiliser REGEX pour rechercher des caractères interdits, je souhaite ajouter que vous pouvez le faire sans utiliser RegEx de suivre:
forbidden = ",;{}()\n\t="
def has_forbidden(txt):
for i in forbidden:
if i in txt:
return True
return False
print(has_forbidden("ok name")) # False
print(has_forbidden("wrong=name")) # True
print(has_forbidden("with\nnewline")) # True
Vous avez probablement besoin d'une classe de caractères
[; {} () \\ n \\\\t =] code>.Votre regex correspond à ces personnages tous ensemble. Avez-vous essayé le jeton
[ code> et] code>([; {} \ (\) \\ n \\ t =]) code>?Pour les deux commentaires ci-dessus, nous NE PAS I> avez besoin de doubler des choses d'échappement comme
\ n code> dans une classe de caractères, une seule barre oblique inverse est suffisante. Et() {} code> ne nécessite aucune échappée du tout.Imprimer ((A.Groups ())) Code> Vous pouvez voir les mots qui correspondent à votre modèle