在CSV输入Python中找到最后一行

时间:2018-11-26 14:35:37

标签: python

由于我不认识熊猫,所以我没有真正找到与我的问题相关的示例,因此我将其发布在这里。让我知道是否不清楚或已经答复。

我有一个这样输入的CSV输入

def import_csv(csvfilename):
    data = []
    with open(csvfilename, "r", encoding="utf-8", errors="ignore") as scraped:
        reader = csv.reader(scraped, delimiter=',')
        row_index = 0
        for row in reader:
            if row:  # avoid blank lines
                row_index += 1
                columns = [str(row_index), row[0], row[1], row[2]]
                data.append(columns)

    return data

我用input_rows索引行(可能有更好的方法吗?)

输入示例:

[['1',
  '[FirstValue]',
  'FirstText',
  'AB'],

 [...]

 ['12',
  "['LastValue']",
  "LastText",
  'YZ']]

我正在寻找该输入列表的最后一行。有没有一种简单的方法可以在不迭代所有行的情况下做到这一点?

谢谢!

4 个答案:

答案 0 :(得分:2)

Python支持负索引。

your_list[-1] # Fetch the last value in your list.

在不了解用例以及有关数据以及如何通常访问数据的情况下,很难说哪种数据结构对您更合适。

答案 1 :(得分:1)

您可以像这样获取数组中的最后一个元素:

some_list[-1]

实际上,您可以使用此语法做更多的事情。 some_list[-n]语法获取倒数第二个元素。因此some_list[-1]获得最后一个元素,some_list[-2]获得倒数第二个,等等

因此,您的情况应该是:

import csv    

def import_csv(csvfilename):
    data = []
    with open(csvfilename, "r", encoding="utf-8", errors="ignore") as scraped:
        reader = csv.reader(scraped, delimiter=',')
        for row in reader:
        if row:  # avoid blank lines
            row_index += 1
            columns = [str(row_index), row[0], row[1], row[2]]
            data.append(columns)
return data

data = import_csv(file_name)
last_row = data[-1]

答案 2 :(得分:0)

值得注意的是,csv.readerIterator,在迭代之前不包含您的数据。对于scraped打开的I / O流对象(也是一个迭代器),也是如此。不幸的是,“我是否可以不遍历文件/数据而获得最后一行”的问题是“否”,除非您知道可以(使用scraped.seek()跳转到特定的流点,否则将无法获取最后一行,直到所有数据都经过迭代。

但是,一旦使用完所有数据,就可以使用data[-1]通过负索引在代码中进行检索,即返回list的最后一行。

Here is a related question that might be of interest to you,但是同样,所有答案都在允许reverse()操作之前消耗了数据(将整个列表读取),因此,必须至少一次读取所有数据。

答案 3 :(得分:0)

您实际上可以在 with 语句 中获得最后一行,因为 python 支持负索引,您可以使用

with open(csvfilename, "r", encoding="utf-8", errors="ignore") as scraped:
        final_line = scraped.readlines()[-1]