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)
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 )
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
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)
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.
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)
Recherchez le fichier cqlshrc généralement placé dans le répertoire .cassandra.
Dans ce fichier,
[csv]
field_size_limit = 1000000000
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)