2015-10-20 3 views
0

У меня есть файл csv, который я пытаюсь прочитать в python, а затем я хочу сохранить первые два столбца в переменной с именем name и gender. Текущий код, я использую следующий:Чтение определенного количества строк .csv в python

import csv 
infile = open('blue.csv', 'r') 
csvfile = csv.reader(infile) 

name = [] 
gender = [] 

for row in csvfile: 
    name.append(row[0]) 
    gender.append(row[1]) 

Есть две проблемы, я сталкивающиеся:

1) файл CSV имеет заголовки, так что я не хочу, включенных в переменных, когда я храню столбцы

2) Мне не хватает пол для последней строки файла csv, поэтому я не хочу включать последнюю строку файла csv, когда я храню его в переменной.

Я программист R, и поэтому для меня способ, которым я обойду это, - прочитать в файле, исключая первую строку и последнюю строку, но я не уверен, как это сделать в python, или еще лучше, если есть более эффективная/более разумная альтернатива.

Если это помогает, вот что макет набор данных будет выглядеть следующим образом:

Name, Gender 
Bob, Male 
Susan, Female 
Doug, 
+0

Не могли бы вы добавить образец вашего CSV? – Onilol

+0

Я сделал, его выше в наборе данных. – user6291

+0

Макет данных не является моим кодом на Python. – user6291

ответ

2

Вы писали

Я R программист и так мне, как я бы обойти это прочитать в файле за исключением первой строки и последней строки, но я не уверен в как сделать это в Python

Это может быть сделано с readlines и list slicing так:

open('foo.csv').readlines()[1: -1] 

Кроме того, обратите внимание, что csv.reader принимает как объект файла и список:

csvfile может быть любой объект, который поддерживает протокол итератора и возвращает строку, каждый раз, когда его следующий метод() называется - объекты файлов и объекты списка подходят.

Таким образом, вы можете просто использовать:

for l in csv.reader(open('foo.csv').readlines()[1: -1]): 
    ... 
0

Вы можете использовать нарезку в сочетании с попыткой за исключением цикла, как так:

for row in csvfile[1:]: 
    try: 
     gender.append(row[1]) 
     name.append(row[0]) 
    except: 
     continue 

Этот код пропускает любая строка, которая не имеет пола, а не только последнюю строку.

0
import csv 

with open('data.csv', 'r') as f1: 
    numberOflines = len([line for line in f1]) -2 
    f1.seek(0) 
    r = csv.reader(f1) 
    next(r, None) # skip first line 
    for row in r: 
     if numberOflines > 0: 
      print(row[0]) 
      numberOflines -=1 
1

Как вы являетесь R программист, я бы порекомендовал вам попробовать pandas.

1) Файл CSV имеет заголовки, так что я не хочу, включенных в переменных, когда я храню столбцы

Вы можете прочитать CSV read_csv(), заботящийся заголовков без каких-либо настроек.

2) Мне не хватает пол для последней строки файла csv, поэтому я не хочу включать последнюю строку файла csv, когда я храню его в переменной.

Я думаю, что ваше требование, чтобы пропустить строки с отсутствующими данными, вы можете использовать dropna()

Таким образом, кодирование части:

In [1]: import pandas as pd 

In [2]: !cat sample_data.csv 
Name, Gender 
Bob, Male 
Susan, Female 
Doug, 

In [3]: pd.read_csv("./sample_data.csv").dropna() 
Out[3]: 
    Name Gender 
0 Bob  Male 
1 Susan Female