由于我不认识熊猫,所以我没有真正找到与我的问题相关的示例,因此我将其发布在这里。让我知道是否不清楚或已经答复。
我有一个这样输入的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']]
我正在寻找该输入列表的最后一行。有没有一种简单的方法可以在不迭代所有行的情况下做到这一点?
谢谢!
答案 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.reader
是Iterator,在迭代之前不包含您的数据。对于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]