web-dev-qa-db-fra.com

Comment convertir des valeurs de chaîne en valeurs entières lors de la lecture d'un fichier CSV?

Lors de l'ouverture d'un fichier CSV, la colonne d'entiers est convertie en une valeur de chaîne ('1', '23', etc.). Quelle est la meilleure façon de boucler pour les convertir en entiers?

import csv

with open('C:/Python27/testweight.csv', 'rb') as f:
    reader = csv.reader(f)
    rows = [row for row in reader if row[1] > 's']

for row in rows:
    print row

Fichier CSV ci-dessous:

Account Value
ABC      6
DEF      3
GHI      4
JKL      7
9
JSmooth

Je pense que cela fait ce que vous voulez:

import csv

with open('C:/Python27/testweight.csv', 'rb') as f:
    reader = csv.reader(f, delimiter='\t')
    header = next(reader)
    rows = [header] + [[row[0], int(row[1])] for row in reader]

for row in rows:
    print row

Production:

['Account', 'Value']
['ABC', 6]
['DEF', 3]
['GHI', 4]
['JKL', 7]
7
martineau

Si le CSV a des en-têtes, je suggère d'utiliser csv.DictReader. Avec cela, vous pouvez faire:

 with open('C:/Python27/testweight.csv', 'rb') as f:
    reader = csv.DictReader(f)
    for row in reader:
        integer = int(row['Name of Column'])
2

Vous pouvez simplement parcourir toutes les lignes comme suit:

import csv

with open('C:/Python27/testweight.csv', 'rb') as f:
    reader = csv.reader(f)
    rows = [row for row in reader if row[1] > `s`]

for index, cols in enumerate(rows[1:], 1):  # Skip the header row
    rows[index][1] = int(cols[1])

print rows

Cela afficherait:

[['Account', 'Value'], ['ABC', 6], ['DEF', 3], ['GHI', 4], ['JKL', 7]]
0
Martin Evans