web-dev-qa-db-fra.com

_csv.Error: champ supérieur à la limite du champ (131072)

J'ai un script qui lit 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)

Cependant, cela génère l'erreur suivante sur certains fichiers csv:

_csv.Error: field larger than field limit (131072)
156
user1251007

Le fichier csv peut contenir des champs très volumineux, augmentez donc le field_size_limit:

import sys
import csv

csv.field_size_limit(sys.maxsize)

sys.maxsize fonctionne pour Python 2.x et 3.x. sys.maxint ne fonctionnerait qu'avec Python 2.x ( SO: qu'est-ce-que-sys-maxint-in-python-3 )

Mettre à jour

Comme Geoff l’a souligné, le code ci-dessus peut générer l’erreur suivante: OverflowError: Python int too large to convert to C long. Pour contourner ce problème, vous pouvez utiliser le code quick and dirty suivant (qui devrait fonctionner sur tous les systèmes dotés de Python 2 et 3):

import sys
import csv
maxInt = sys.maxsize
decrement = True

while decrement:
    # decrease the maxInt value by factor 10 
    # as long as the OverflowError occurs.

    decrement = False
    try:
        csv.field_size_limit(maxInt)
    except OverflowError:
        maxInt = int(maxInt/10)
        decrement = True
221
user1251007

Cela peut être dû au fait que votre fichier CSV contient des guillemets simples ou doubles incorporés. Si votre fichier CSV est délimité par des tabulations, essayez de l’ouvrir comme suit:

c = csv.reader(f, delimiter='\t', quoting=csv.QUOTE_NONE)
127
CSP

Ci-dessous est à vérifier la limite actuelle

csv.field_size_limit()

Out [20]: 131072

Ci-dessous est d'augmenter la limite. Ajoutez-le au code

csv.field_size_limit(100000000)

Essayez de vérifier à nouveau la limite

csv.field_size_limit()

Out [22]: 100000000

L'erreur "_csv.Error: champ supérieur à la limite de champ (131072)" ne s'affiche désormais plus.

13
Tad

Parfois, une ligne contient une colonne de guillemets doubles. Quand le lecteur de csv essaye de lire cette rangée, la fin de colonne n'est pas comprise et de déclencher cette relance

reader = csv.reader(cf, quoting=csv.QUOTE_MINIMAL)
1
Ahmet Erkan ÇELİK

Recherchez le fichier cqlshrc généralement placé dans le répertoire .cassandra.

Dans ce fichier,

[csv]
field_size_limit = 1000000000
0
Abdul Waseh

Cela vient de m'arriver sur un fichier CSV "simple". Certaines personnes pourraient l'appeler un fichier formaté non valide. Aucun caractère d'échappement, aucun guillemet double et délimiteur n'était un point-virgule.

Un exemple de ligne de ce fichier ressemblerait à ceci:

Première cellule; Deuxième "cellule avec une double citation et un espace de début; cellule" partiellement citée "; dernière cellule

la citation simple dans la deuxième cellule jetterait l'analyseur de Rails. Ce qui a fonctionné était:

csv.reader(inputfile, delimiter=';', doublequote='False', quotechar='', quoting=csv.QUOTE_NONE)
0
Steffen Winkler