簡體   English   中英

從 CSV 輸入 Python 中查找最后一行

[英]Find the last row from a CSV input Python

我沒有真正找到與我的問題相關的例子,因為我不知道 Pandas,所以我把它貼在這里。 如果這不清楚或已經得到回應,請告訴我。

我有一個 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']]

我希望獲得此輸入列表的最后一行。 有沒有一種簡單的方法可以在不迭代所有行的情況下做到這一點?

謝謝 !

您可以像這樣獲取數組中的最后一個元素:

some_list[-1]

事實上,您可以使用此語法做更多事情。 some_list[-n]語法獲取倒數第 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]

Python 支持負索引。

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

如果不了解您的用例以及有關數據的更多信息以及您通常如何訪問數據,則很難說哪種數據結構更適合您。

值得注意的是csv.reader是一個 迭代器,在迭代之前不包含您的數據。 對於同樣是迭代器的scraped打開的 I/O Stream 對象也是如此。 不幸的是,“我可以在不遍歷文件/數據的情況下獲取最后一行”的問題是否,除非您知道可以跳轉到的特定流點(使用scraped.seek() ),否則您將無法獲取最后一行,直到所有數據都被迭代。

但是,一旦您使用了所有數據,您就可以在代碼中使用data[-1]通過負索引檢索,即返回list的最后一行。

這是一個您可能感興趣的相關問題,但同樣,在允許reverse()操作之前,答案都消耗了數據(將整個作為列表讀取reverse() ,因此,所有數據必須在至少。

您實際上可以在with 語句中獲取最后一行由於 python 支持負索引,您可以使用

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM