首页 > 解决方案 > 读取 csv 文件中的最后一行错误:迭代器应返回字符串,而不是字节(您是否以文本模式打开文件?)

问题描述

我想读取最后一行温度(即 24.925)。我的数据.csv格式如下

Date                Temp            RH
2020-12-07 14:00:00 24.5198601667   66.9861108333
2020-12-07 15:00:00 24.9940271667   64.4736103333
2020-12-07 16:00:00 24.925          65

我正在遵循给定的代码:

from collections import deque
import csv

def get_last_row(csv_filename):
    with open(csv_filename, 'rb') as f:
        return deque(csv.reader(f), 1)[0]

lastline = ', '.join(get_last_row('data.csv'))
values = lastline.split("\t")
print ((values[1]))

任何建议都会有所帮助。 先感谢您。

标签: pythoncsv

解决方案


这是一个分工问题。CSV 模块不用于计算字符串编码。解码时,它将寻找字符串分隔符、引号和分隔符。由于字符串不会直接与字节进行比较,除非它们已被解码,因此模块无法继续。例如,CSV 查找单个字符分隔符,但 UTF-16 中的逗号是 2 个字节。解决方法:以文本模式打开。

我为这个例子所做的只是"rb"从公开电话中删除。这将以系统的默认编码打开文件。例如,您可能想要指定一个编码open('data.csv', encoding='utf-8')

from collections import deque
import csv

def get_last_row(csv_filename):
    with open(csv_filename) as f:
        return deque(csv.reader(f), 1)[0]

lastline = ', '.join(get_last_row('data.csv'))
values = lastline.split("\t")
print ((values[1]))

注意:此代码不适用于您提供的示例,该示例实际上不是 CSV,并且由于它不包含选项卡,values[1]因此是索引错误。


推荐阅读