_csv.Erreur: le champ plus grand que la limite de champ (131072)
J'ai un script de lecture dans un fichier csv avec de très grands champs:
# example from http://docs.python.org/3.3/library/csv.html?highlight=csv%20dictreader#examples
import csv
with open('some.csv', newline='') as f:
reader = csv.reader(f)
for row in reader:
print(row)
Toutefois, cela déclenche le message d'erreur suivant sur certains fichiers csv:
_csv.Error: field larger than field limit (131072)
- Encore mieux serait de se demander pourquoi il y a tant de grands champs qui Est attendu dans vos données? Parfois, les erreurs de ce type sont le signe d'un problème différent. J'ai eu quelques Mauvaises Données dans la mienne, qui comprenait une double aléatoire caractère de guillemet et a donc dû utiliser le QUOTE_NONE option affichée dans une autre réponse ici.
- J'ai mis à jour ma question pour indiquer que, dans mon cas, d'énormes champs peuvent se produire. Il n'y a pas de mauvaises données dans le fichier csv.
- De telles choses arrivent parce que parfois, vous trouverez des gens de stockage d'images (ou d'autres fichiers binaires) au format base64 dans les tables de base de données.
Vous devez vous connecter pour publier un commentaire.
Le fichier csv peut contenir de très grands champs, donc d'augmenter la
field_size_limit
:sys.maxsize
fonctionne pour Python 2.x et 3.x.sys.maxint
ne travaillons qu'avec Python 2.x (DONC: quel-est-sys-exemple maxint-en-python-3)Mise à jour
Que Geoff a souligné, le code ci-dessus peut entraîner l'erreur suivante:
OverflowError: Python int too large to convert to C long
.Pour contourner cela, vous pouvez utiliser les éléments suivants rapide et sale code (qui devrait fonctionner sur tous les systèmes avec Python 2 et Python 3):
maxInt = sys.maxsize
retourne9223372036854775807L
qui, par conséquent, les résultats dans unTypeError: limit must be an integer
lors de l'appel decsv.field_size_limit(maxInt)
. Il est intéressant de noter, à l'aide demaxInt = int(sys.maxsize)
ne pas en changer. Brut de solution de contournement consiste à simlpy utilisationcsv.field_size_limit(2147483647)
qui, bien sûr, provoquer des problèmes sur d'autres plates-formes. Dans mon cas, cela a été adquat pour identifier le cassé de la valeur dans le CSV, fixer les options d'exportation dans l'autre application et éliminer le besoin decsv.field_size_limit()
.Ce pourrait être parce que votre fichier CSV contient des guillemets simples ou doubles. Si votre fichier CSV est délimité par des tabulations essayez de l'ouvrir comme:
-u 3
option de ligne de commande, aka--quoting 3
Ci-dessous pour vérifier la limite de courant
Out[20]: 131072
Ci-dessous est d'augmenter la limite. Ajouter le code
Essayez de vérifier la limite
Out[22]: 100000000
Maintenant, vous n'obtenez l'erreur "_csv.Erreur: le champ plus grand que la limite de champ (131072)"
csv les tailles de champ sont contrôlés par des [Python 3]: csv.field_size_limit([new_limit]):
Il est configuré par défaut pour 128k ou 0x20000 (131072), ce qui devrait être suffisant pour tout décent .csv:
Cependant, lorsque l'on traite avec un .csv fichier (avec le bon citant et délimiteur) ayant (au moins) un terrain de plus de cette taille, l'erreur s'affiche.
Pour se débarrasser de l'erreur, la limite de taille devrait être augmenté (pour éviter tout soucis, la valeur maximale possible est tenté).
Coulisses (vérifier [GitHub]: python/disponible - (master) disponible/Modules/_csv.c pour les détails de mise en œuvre), la variable qui contient cette valeur est un C long ([Wikipedia]: les types de données C), dont la taille varie selon CPU architecture et OS (jeLP). Le classique de la différence: pour un 64 bits OS, le long type de taille (en bits) est:
Lors de la tentative pour le définir, la nouvelle valeur est vérifié pour être dans le long limites, c'est pourquoi, dans certains cas, une autre exception apparaît (ce cas est fréquent sur Gagner):
Pour éviter ce problème, définissez le (maximum possible) limite (LONG_MAX) à l'aide d'un artifice (grâce à [Python 3]: ctypes - Un étranger bibliothèque de fonctions pour Python). Il devrait fonctionner sur Python 3 et Python 2, sur toute CPU /OS.
Pour plus de détails sur la lecture avec C types de limites de Python, vérifiez [AINSI,]: Maximum et minimum de la valeur de C les types entiers de Python (@CristiFati réponse).
Parfois, une ligne contiennent des devis double colonne. Lorsque csv reader essayer de lire cette ligne, pas compris la fin de la colonne et le feu de cette relance.
La Solution est ci-dessous:
Trouver le cqlshrc fichier généralement placés dans des .cassandra répertoire.
Dans ce fichier, ajouter,
J'ai juste eu cela m'arrive à moi sur un "simple" fichier CSV. Certains pourraient appeler cela une défaillance de fichier au format. Aucun des caractères d'échappement, pas de guillemets doubles et séparateur est un point-virgule.
Un exemple de ligne à partir de ce fichier devrait ressembler à ceci:
l'apostrophe dans la deuxième cellule jeter l'analyseur hors de ses rails. Ce qui a fonctionné a été: