在python中读取特定数量的.csv行

时间:2015-10-20 18:07:29

标签: python csv

我有一个csv文件,我试图读入python,然后我想将前两列存储在一个名为name和gender的变量中。我正在使用的当前代码如下:

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,

4 个答案:

答案 0 :(得分:4)

你写了

  

我是一名R程序员,所以对我来说,解决这个问题的方法是读取不包括第一行和最后一行的文件,但我不确定如何在python中执行此操作

这可以通过readlineslist slicing完成,如下所示:

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

此外,请注意csv.reader同时接受文件对象和列表:

  

csvfile可以是任何支持迭代器协议的对象,每次调用next()方法时都返回一个字符串 - 文件对象和列表对象都是合适的。

所以你可以使用:

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

答案 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

答案 2 :(得分:0)

您可以将切片与try except循环结合使用,如下所示:

function bagger293(bigArray, results) {
    // If results is passed, it will stay with that data. If it is not passed, it will be a new array.
    results = results || []; 

    for (var item in bigArray){
        if (typeof bigArray[item] === 'object'){
          bagger293(bigArray[item], results);
        }else{
          results.push(bigArray[item]);
        }
      }

      return results;
}

此代码会跳过任何没有性别的行,而不仅仅是最后一行。

答案 3 :(得分: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