Les fichiers CSV avec des guillemet et une virgule caractères à l'intérieur des champs
J'ai une pile de fichiers CSV je veux analyser le problème, c'est la moitié de la ont guillemets utilisés comme les guillemets, et les virgules à l'intérieur du champ. Ils ne sont pas vraiment CSV, mais ils ont un nombre fixe de champs qui sont identifiables. Le dialecte=csv."excel" paramètre fonctionne parfaitement sur des fichiers avec les extra " et , de caractères à l'intérieur du champ.
Ces données est vieux/non pris en charge. Je suis en train d'essayer de pousser un peu de vie en elle.
par exemple
"AAAAA
AAAA
AAAA
AAAA","AAAAAAAA
AAAAAA
AAAAA "AAAAAA" AAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAA, AAAAA
AAAAAAAAA AAAAA AAAAAAAAAA
AAAAA, "AAAAA", AAAAAAAAA
AAAAAAAA AAAAAAAA
AAAAAAA
"
C'est le déclenchement de l'analyseur de fichier et renvoie une erreur _csv.Error: newline inside string
. Je narrrowed à cet être le problème en supprimant les guillemets de l'intérieur de la 2e champ et le csv.module de lecteur de traite le fichier OK.
Certains champs sont multi-ligne - je ne sais pas si c'est important à savoir.
J'ai été farfouillé dans le dialecte de paramètres, et alors que je peux trouver "skipinitialspace", cela ne semble pas résoudre le problème.
Pour être clair, ce n'est pas valide 'CSV', ses objets de données qui défilent sur un CSV structure, mais qui ont , et des " caractères à l'intérieur de l'essai sur le terrain.
La lineterminator est \x0d\x0a
J'ai essayé un certain nombre de va à différentes permuations de l'apostrophe et le citant variable dans le dialecte du module, mais je ne peux pas obtenir ce à analyser correctement.
Je ne peux pas être certain qu'un ," ou ", la combinaison n'existe que sur les limites du champ.
Ce problème n'existe que pour l'une (la dernière) de plusieurs champs dans le fichier, et il y a plusieurs milliers de fichiers.
""
) pour échapper à une citation d'un personnage dans une cité de terrain. Alternativement, le terrain pourrait être non cotées et aucune fuite n'est nécessaire, bien que les virgules et les retours à la ligne ne peut pas apparaître dans un tel domaine. Les guillemets simples comme ce ne sont pas normalement valide. Est-il possible de modifier les options de la source de vos données au format CSV, pour mieux se conformer aux attentes de la plupart des autres CSV lecteurs (y compris python).J'ai hérité de données, et il y a beaucoup d'elle... Donc je ne peux pas faire autre chose que de construire un analyseur syntaxique qui peut chercher en dehors de nouveau.
Les fichiers sont pas endommagés, son mal/mal structuré comme un CSV. "J'ai hérité de données" est l'exact 'excuse' - c'est juste ce qui se passe. Les données sont anciennes ou abandonnées, et je veux ressusciter.
S'il vous PLAÎT (si vous souhaitez une aide réelle) de modifier une question à inclure de manière cohérente TOUTES les informations vous avoir dribblé dans les commentaires en plus de ce codage est utilisé plus de savoir si la non-citation-doublé champ(s) affiche(s) en constante colonnes de plus qu'est-ce que le séparateur de ligne (\n ou \r\n) plus que d'une virgule, \r, \n apparaissent dans les colonnes. Que vos données sont "non-partageable", puis masque (et compresser) par substitution de "Un" pour chaque période de chaîne de caractères alphabétiques -- si cela affecte l'analyse de vos données est absolument peluche -- et de publier un vaste échantillon de quelque part.
a noté, et édité. Je vous remercie.
OriginalL'auteur Jay Gattuso | 2012-02-10
Vous devez vous connecter pour publier un commentaire.
Je ne suis pas autorisé à commenter tout à fait encore, donc je vais poster une réponse...
En supposant que vous utilisez des virgules comme votre délimiteur, des virgules à l'intérieur de vos données? Si pas, alors vous pourriez faire un énorme rechercher et remplacer pour doubler tous les guillemets après le premier et avant les derniers caractères du champ avant CSV traitement.
Eh bien, c'était une idée. Dans un certain champ de données pour une base de données ici à mon travail, j'ai interdit l'utilisation de la virgule. J'ai été en mesure de sortir avec elle, même si, uniquement parce qu'il n'y avait que 100 enregistrements affectés à 50 000 ligne fichier.
Son une belle idée, mais j'ai plusieurs milliers de fichiers, chacun est à peu près inconnu - attendre - je peux le faire de cette façon - je sais à peu près où la pièce de théâtre " les caractères sont dans le fichier - je peux les trouver, de les remplacer avec des doubles, et nous espérons faire une valide csv de cette façon.
Comment de nombreux domaines sont concernés par les données avec des virgules et devis de caractères? Si c'est seulement 1, le problème est toujours résoluble.
Un champ, ce champ peut être quelques centaines de lignes de texte.
OriginalL'auteur Herbie
Avez-vous essayé en passant
csv.QUOTE_NONE
via lequoting
mot-clé arg? Sans avoir un peu de code ou de données pour tester cela, je n'ai aucun moyen de savoir si cela fonctionne en fait sur vos données, mais il semble fonctionner avec la fragment que vous avez fournis.Gattuso, dans ce cas, vous devriez vraiment poster un peu plus de données, par exemple. Quel délimiteur l'utilisation du fichier? Si il a des citations et des virgules, dispersés à travers les données, il faut utiliser un autre délimiteur. Ou bien ce n'est tout simplement pas un bien formé fichier csv.
Le séparateur est un standard virgule, son tout simplement pas bien formé. Je commence à penser que je pourrais avoir de la pré-analyse, recherche des bonnes conditions et de remplacer les guillemets là avec double... je ne pense que c'est ce que le dialecte module a pour. Je ne posterais plus d'exemples, mais ce n'est pas partageable de données. Le problème est que sa mauvaise csv, non pas que son "spécial".
"tout le fichier brisé par un espace blanc"? Comment cela peut-il arriver? Avez-vous aléatoire des virgules partout dans le fichier, aussi?
Nan, mais le quotes_none configuration des espaces utilisés comme séparateur. J'ai essayé le réglage du séparateur dans le même format csv.lecteur d'appel ',' mais il a abouti à la même liste en cours de création. Comme nous l'avons établi, ce meothed n'est pas d'aller travailler pour ce mal formé " CSV " des données.
OriginalL'auteur senderle
Je voudrais écrire un convertisseur qui analysaient la première csv et de sortie valide. Vous pouvez éventuellement utiliser l' ", ou "\n comme le mécanisme de détermination de la délimitation.
OriginalL'auteur Joshua