web-dev-qa-db-fra.com

Lecture des lignes d’un fichier CSV dans Python

J'ai un fichier CSV, voici un exemple de ce à quoi il ressemble:

Year:  Dec: Jan:
1      50   60
2      25   50
3      30   30
4      40   20
5      10   10

Je sais comment lire le fichier et imprimer chaque colonne (par exemple - ['Year', '1', '2', '3', etc]). Mais ce que je veux réellement faire, c'est lire les lignes, ce qui serait comme ceci ['Year', 'Dec', 'Jan'] Puis ['1', '50', '60'] Et ainsi de suite.

Et puis je voudrais stocker ces nombres ['1', '50', '60'] Dans des variables afin que je puisse les totaliser plus tard, par exemple:

Year_1 = ['50', '60']. Ensuite, je peux faire sum(Year_1) = 110.

Comment pourrais-je faire cela dans Python 3?

31
Goose

Vous pouvez faire quelque chose comme ça:

with open("data1.txt") as f:
    lis = [line.split() for line in f]        # create a list of lists
    for i, x in enumerate(lis):              #print the list items 
        print "line{0} = {1}".format(i, x)

# output 
line0 = ['Year:', 'Dec:', 'Jan:']
line1 = ['1', '50', '60']
line2 = ['2', '25', '50']
line3 = ['3', '30', '30']
line4 = ['4', '40', '20']
line5 = ['5', '10', '10']

ou :

with open("data1.txt") as f:
    for i, line in enumerate(f):             
        print "line {0} = {1}".format(i, line.split())

# output         
line 0 = ['Year:', 'Dec:', 'Jan:']
line 1 = ['1', '50', '60']
line 2 = ['2', '25', '50']
line 3 = ['3', '30', '30']
line 4 = ['4', '40', '20']
line 5 = ['5', '10', '10']

Modifier:

with open('data1.txt') as f:
    print "{0}".format(f.readline().split())
    for x in f:
        x = x.split()
        print "{0} = {1}".format(x[0],sum(map(int, x[1:])))

# output          
['Year:', 'Dec:', 'Jan:']
1 = 110
2 = 75
3 = 60
4 = 60
5 = 20
19
Ashwini Chaudhary

Utilisez le module csv :

import csv

with open("test.csv", "r") as f:
    reader = csv.reader(f, delimiter="\t")
    for i, line in enumerate(reader):
        print 'line[{}] = {}'.format(i, line)

Sortie:

line[0] = ['Year:', 'Dec:', 'Jan:']
line[1] = ['1', '50', '60']
line[2] = ['2', '25', '50']
line[3] = ['3', '30', '30']
line[4] = ['4', '40', '20']
line[5] = ['5', '10', '10']
62
Joel Cornett

La lire en colonne est plus difficile?

Quoi qu'il en soit, cela lit la ligne et stocke les valeurs dans une liste:

for line in open("csvfile.csv"):
    csv_row = line.split() #returns a list ["1","50","60"]

Solution moderne:

# pip install pandas
import pandas as pd 
df = pd.read_table("csvfile.csv", sep=" ")
16
The Unfun Cat
import csv

with open('filepath/filename.csv', "rt", encoding='ascii') as infile:
    read = csv.reader(infile)
    for row in read :
        print (row)

Cela résoudra votre problème. N'oubliez pas de donner l'encodage.

5
prashasthbaliga
#  This program reads columns in a csv file
import csv
ifile = open('years.csv', "r")
reader = csv.reader(ifile)

# initialization and declaration of variables
rownum = 0
year = 0
dec = 0
jan = 0
total_years = 0`

for row in reader:
    if rownum == 0:
        header = row  #work with header row if you like
    else:
    colnum = 0
    for col in row:
        if colnum == 0:
            year = float(col)
        if colnum == 1:
            dec = float(col)
        if colnum == 2:
            jan = float(col)
        colnum += 1
    # end of if structure

# now we can process results
if rownum != 0:
    print(year, dec, jan)
    total_years = total_years + year
    print(total_years)

# time to go after the next row/bar
rownum += 1

ifile.close()

Un peu tard mais néanmoins ... Vous devez créer et identifier le fichier csv nommé "years.csv":

Année déc. Jan 1 50 60 2 25 50 3 30 30 4 40 20 5 10 10

3
John Warner

On peut le faire en utilisant la bibliothèque pandas.

Exemple:

import numpy as np
import pandas as pd

file = r"C:\Users\unknown\Documents\Example.csv"
df1 = pd.read_csv(file)
df1.head()
0
srikanth reddy

Le module csv gère les fichiers csv par ligne. Si vous voulez le gérer par colonne, pandas est une bonne solution.

En outre, il existe 2 méthodes pour obtenir toutes les colonnes (ou spécifiques) avec du code pur Python).

1. csv.DictReader

with open('demo.csv') as file:
    data = {}
    for row in csv.DictReader(file):
        for key, value in row.items():
            if key not in data:
                data[key] = []
            data[key].append(value)

C'est facile à comprendre.

2. Lecteur CSV avec Zip

with open('demo.csv') as file:
    data = {values[0]: values[1:] for values in Zip(*csv.reader(file))}

Ce n'est pas très clair, mais efficace.

Zip(x, y, z) transpose (x, y, z), tandis que x, y, z sont des listes. *csv.reader(file) make (x, y, z) pour Zip, avec les noms de colonne.

Résultat de la démo

Le contenu de demo.csv:

a,b,c
1,2,3
4,5,6
7,8,9

Le résultat de 1:

>>> print(data)
{'c': ['3', '6', '9'], 'b': ['2', '5', '8'], 'a': ['1', '4', '7']}

Le résultat de 2:

>>> print(data)
{'c': ('3', '6', '9'), 'b': ('2', '5', '8'), 'a': ('1', '4', '7')}
0
Yan QiDong

Exemple:

import pandas as pd

data = pd.read_csv('data.csv')

# read row line by line
for d in data.values:
  # read column by index
  print(d[2])
0
Bikram