Como ler uma única linha de dados csv em Python?

94

Existem muitos exemplos de leitura de dados csv usando python, como este:

import csv
with open('some.csv', newline='') as f:
  reader = csv.reader(f)
  for row in reader:
    print(row)

Quero apenas ler uma linha de dados e inseri-los em várias variáveis. Como faço isso? Procurei em todos os lugares por um exemplo funcional.

Meu código recupera apenas o valor de i e nenhum dos outros valores

reader = csv.reader(csvfile, delimiter=',', quotechar='"')
for row in reader:
  i = int(row[0])
  a1 = int(row[1])
  b1 = int(row[2])
  c1 = int(row[2])
  x1 = int(row[2])
  y1 = int(row[2])
  z1 = int(row[2])
andrebruton
fonte
qual a estrutura do seu csv? O que é rowquando você está iterando através do leitor?
dm03514

Respostas:

145

Para ler apenas a primeira linha do arquivo csv, use next()no objeto leitor.

with open('some.csv', newline='') as f:
  reader = csv.reader(f)
  row1 = next(reader)  # gets the first line
  # now do something here 
  # if first row is the header, then you can do one more next() to get the next row:
  # row2 = next(f)

ou:

with open('some.csv', newline='') as f:
  reader = csv.reader(f)
  for row in reader:
    # do something here with `row`
    break
Ashwini Chaudhary
fonte
38

você poderia obter apenas a primeira linha como:

with open('some.csv', newline='') as f:
  csv_reader = csv.reader(f)
  csv_headings = next(csv_reader)
  first_line = next(csv_reader)
dm03514
fonte
2
Provavelmente, é bom adicionar "with open ('csv_file', 'r')" como f: csv_reader = csv.reader (f) ... "
Sanchit
23

Você pode usar a biblioteca Pandas para ler as primeiras linhas do enorme conjunto de dados.

import pandas as pd

data = pd.read_csv("names.csv", nrows=1)

Você pode mencionar o número de linhas a serem lidas no parâmetro nrows.

Aravind Krishnakumar
fonte
14

Da documentação do Python :

E embora o módulo não suporte diretamente a análise de strings, isso pode ser feito facilmente:

import csv
for row in csv.reader(['one,two,three']):
    print row

Simplesmente coloque seus dados de string em uma lista de singleton.

Robert Elwell
fonte
8

A maneira simples de obter qualquer linha no arquivo csv

import csv
csvfile = open('some.csv','rb')
csvFileArray = []
for row in csv.reader(csvfile, delimiter = '.'):
    csvFileArray.append(row)
print(csvFileArray[0])
Oscar.Chou
fonte
3
Para fazer isso funcionar em python3, basta remover o 'b' em 'rb'
Ricky Avina
1
Isso simplesmente funciona, na verdade, sem o delimiter='.'.
suvtfopw
1
Para responder à pergunta dos pôsteres, basta adicionar um breakapós o csvFileArray.append(row)e ele lerá apenas a primeira linha.
StratusBase LLC
5

Apenas para referência, um forloop pode ser usado após obter a primeira linha para obter o resto do arquivo:

with open('file.csv', newline='') as f:
    reader = csv.reader(f)
    row1 = next(reader)  # gets the first line
    for row in reader:
        print(row)       # prints rows 2 and onward
Emerson Peters
fonte
3

Para imprimir um intervalo de linha, neste caso da linha 4 a 7

import csv

with open('california_housing_test.csv') as csv_file:
    data = csv.reader(csv_file)
    for row in list(data)[4:7]:
        print(row)
Biplob Das
fonte