【问题标题】:Reading 2nd column of last row in csv file读取csv文件最后一行的第二列
【发布时间】:2019-07-11 23:11:55
【问题描述】:

我正在尝试制作一个点钞机,您可以在其中添加和取出货币并跟踪您的钱的去向(这对我来说只是一个迷你项目,我知道有更好的应用程序适合此)。

我想在每次程序运行时显示当前余额,我唯一的问题是如何读取 csv 文件中的最后一行和其中的第二列。

这是我的 csv 文件布局:

Date, Current Balance, Money In, Money Out, Reason, Other
10/04/1994, £205, £10, -, Birthday, -

我当前的代码是:

with open("Logs.csv", "r") as f:
    for row[-1] in f:
        currentBalance = row[-1], row[-2]


def MainMenu():
    print(f"{bnum1} Welcome to your Money Logger! {bnum1}\n\
{bnum2} 1.         Money In           {bnum2}\n\
{bnum2} 2.         Money Out          {bnum2}\n\
{bnum3} ")

我对编程很陌生,所以我不太确定如何获取特定的列和行。任何帮助将不胜感激。

【问题讨论】:

    标签: python python-3.x csv


    【解决方案1】:

    我认为使用pandas 处理表/数据框更容易。你可以使用类似的东西:

    import pandas as pd
    df = pd.read_csv('Logs.csv')
    print(df.iloc[:, 1]) # print the second column
    print(df.iloc[1, :]) # print the second row
    

    【讨论】:

    • 感谢您的回复,我觉得对于像我这样的初学者来说,pandas 是一个相当复杂的模块。但再次感谢。
    【解决方案2】:

    您可以使用我对问题AttributeError when trying to use seek() to get last row of csv file 的答案的更新来做到这一点。

    from collections import deque
    import csv
    
    def get_last_row(csv_filename):
        with open(csv_filename, 'r', newline='') as f:
            try:
                lastrow = deque(csv.reader(f, delimiter='\t'), 1)[0]
            except IndexError:  # Empty file.
                lastrow = None
            return lastrow
    
    
    row = get_last_row("Logs.csv")
    print(row[1])  # Print second column. -> £205
    

    【讨论】:

    • 嗯...我收到此代码的索引错误:codeshare.io/anMZrV。 line 30, in print(row[1]) # 打印第二列。 -> £205 IndexError:列表索引超出范围
    • DeathResister:听起来最后一行没有第二列。在print(row[1]) 前面加上print(row),看看里面有什么。
    • 它打印出“['10/04/1994\t£205\t£10\t-\tBirthday\t-']”
    • @DeathResister:哦...这是因为您的 csv 文件是制表符而不是逗号分隔的 - 这在您的问题中发布的 csv 文件布局中并不明显,请参阅我的答案的更新。
    【解决方案3】:

    不是超级快,但是:

    with open('Logs.csv', 'r') as logs:
        data = logs.readlines()
        last_row = data[-1].split('\t') # Update for tab delimit.
        second_cell = last_row[1]
    

    您打开文件,然后使用readlines() 读回所有数据 成一个列表。也就是说,列表中的每一行都有一个项目。然后 访问最后一个元素 - data[-1],并将其拆分为一个列表 split(',')。您可能需要在逗号后使用空格,只需播放 关于它。最后,您从该列表中获取第二个元素。 记住 python 使用基于 0 的索引。

    如果您有任何问题,请告诉我。祝你好运。

    编辑:根据@martineau 更新制表符分隔

    【讨论】:

    • 所以这是我添加代码后的当前代码:codeshare.io/5QLp6q。问题是,我收到一个索引错误:第 14 行,在 second_cell = last_row[1] IndexError: list index out of range。任何想法如何解决这个问题?,谢谢你的一切
    • 我怀疑@martineau 是正确的。如果你能告诉我失败的那一行,我可以提供帮助。
    • 您的变体中的第 15 行,但在 Martineau 中,这是相同的错误,但行不同。
    • 已更新 @martineau 的 cmets。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-21
    • 2019-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多