csv.Erreur: champ plus grand que la limite du champ (131072)
j'ai un script qui lit dans un fichier csv avec des champs énormes:
# 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 jette l'erreur suivante sur certains fichiers csv:
_csv.Error: field larger than field limit (131072)
4 réponses
le fichier csv peut contenir de très grands champs, donc augmenter le field_size_limit
:
import sys
import csv
csv.field_size_limit(sys.maxsize)
sys.maxsize
travaille pour Python 2.x et 3.x. sys.maxint
ne fonctionnerait qu'avec Python 2.x ( DONC: quel-est-sys-exemple maxint-en-python-3 )
mise à Jour
comme L'a souligné Geoff, le code ci-dessus pourrait entraîner l'erreur suivante: OverflowError: Python int too large to convert to C long
.
Pour contourner cela, vous pouvez utiliser le suivant rapide et sale code (qui devrait fonctionner sur tous les systèmes avec Python 2 et Python 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
cela pourrait être parce que votre fichier CSV a intégré des guillemets simples ou doubles. Si votre fichier CSV est délimité par un onglet, essayez de l'ouvrir comme suit:
c = csv.reader(f, delimiter='\t', quoting=csv.QUOTE_NONE)
ci-dessous est de vérifier la limite actuelle
csv.field_size_limit()
[20]: 131072
ci-Dessous est d'augmenter la limite. Ajoutez-le au code
csv.field_size_limit(100000000)
essayer de vérifier à nouveau la limite
csv.field_size_limit()
[22]: 100000000
Maintenant vous n'obtiendrez pas l'erreur" _csv.Erreur: champ plus grand que la limite de champ (131072) "
parfois,une ligne contient une double colonne citation. Lorsque le lecteur csv essayer de lire cette ligne, pas compris fin de colonne et le feu cette augmentation. La Solution est ci-dessous:
reader = csv.reader(cf, quoting=csv.QUOTE_MINIMAL)