python - 读取 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]))
任何建议都会有所帮助。 先感谢您。
解决方案
这是一个分工问题。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]
因此是索引错误。
推荐阅读
- react-native - React Native:businessPhoneNumber 保存后不持久
- c# - 在 onClick 页面重定向到页面但显示已删除数据之后?
- python - Python将字符串列表拆分为包含原始字符串的列表列表
- java - UIManager,如何获取不同 LookAndFeels 的值?
- python - 使用 Python 循环遍历元组列表
- javascript - 计算输入要素的几何交集并在 esri srcgis 中相应地更新输入要素类中的要素
- docker - 在模拟操作系统时运行命令
- ada - 确定项目构建所需的 Ada 源文件
- python - 从 Numpy 数组中绘制 python matplotlib imshow
- postgresql - 向 PostgreSQL 中的 JSONB 字段添加多个路径项