dbfread报错ValueError错误解决方法
问题
我在用dbfread处理.dbf数据的时候出现了报错
ValueError("could not convert string to float: b'.'",)
然后查找.dbf源文件的时候,发现在报错的那一行数据中,有一列甚至好几列的数据中出现了'.',里面是否有空格忘记了,但是应该没关系,我查阅了dbfred库文件中的代码,里面对空格的问题已经有了很好的处理。所以这里报错的原因就是
string类型的'.'被认为是数值,却无法转换为float类型的数值,导致报错。
原因
点击报错的位置,错误信息里面除了有代码中出错的位置之外,还有库文件中出错的位置。
点击之后就可以看到,在文件dbfread/field_parser.py中
def parseN(self, field, data):
"""Parse numeric field (N) Returns int, float or None if the field is empty.
"""
# In some files * is used for padding.
data = data.strip().strip(b'*') try:
return int(data)
except ValueError:
if not data.strip():
return None
else:
# Account for , in numeric fields
return float(data.replace(b',', b'.'))
可见在源码中没有对'.'进行处理就
return float(data.replace(b',', b'.'))
解决方案
知道了原因之后,我们就只需要增加一个elif来对'.'进行处理就好了。
def parseN(self, field, data):
"""Parse numeric field (N)
Returns int, float or None if the field is empty.
"""
# In some files * is used for padding.
data = data.strip().strip(b'*')
try:
return int(data)
except ValueError:
if not data.strip():
return None # For English: If the value is b'.', we need return '.', or the code will have some error.
# For Chinese: 在我的代码中,有的值是'.',然后运行了之后就报了格式错误,添加下面两行代码可以解决这个问题,返回值是String类型的'.'
elif data.strip() == b'.':
return '.' else:
# Account for , in numeric fields
return float(data.replace(b',', b'.'))
在里面加入了两行代码
elif data.strip() == b'.':
return '.'
详情可见我在github上对修改
https://github.com/TinyHandsome/dbfread.git
展望
我想除了'.'的问题之外,可能还会有各种奇葩的问题,同样可以通过修改库文件的方法,直接将无法处理的字符串或信息,转换成你想要得到的信息,比如我这里是"."到".",虽然都是“.”,但是结果完全不一样,至少不会报错,对于问题的解决也挺直接的。
希望能解决读者的问题。有其他的问题可以通过回复或者私聊我。
dbfread报错ValueError错误解决方法的更多相关文章
- laravel 项目表单中有csrf_token,但一直报错419错误 解决redis连接错误:MISCONF Redis is configured to save RDB snapshots, but it is currently not able to persi
laravel 项目表单中有csrf_token,但一直报错419错误,因为项目中使用到Redis缓存,在强制关闭Redis后出现的问题,查询laravel.log文件查找相关问题 安装redis后在 ...
- vue.js常见的报错信息及其解决方法的记录
1.Vue packages version mismatch 翻译:vue包版本匹配错误 报错样例: 报错原因:通常出现于一些依赖库的更新或者安装新的依赖库之后(可以认为npm update已经成为 ...
- Python首次安装后运行报错(0xc000007b)的解决方法
最近在安装完Python后运行发现居然报错了,错误代码是0xc000007b,于是通过往上查找发现是因为首次安装Python缺乏VC++库的原因,下面通过这篇文章看看如何解决这个问题吧. 错误提示 ...
- 使用Guava报错NoSuchMethodError的解决方法
在使用Guava缓存的时候.系统报错: java.lang.NoSuchMethodError: com.google.common.base.Objects.firstNonNull 错误原因就是找 ...
- MQ报错2009/2085解决方法
1.1. 响应2009错误 1.1.1. 涉及协议 MQ,调试回放阶段 1.1.2. 错误信息 完成码2原因为2009 1.1.3. 可能原因 远端MQ连接数不足,拒绝连接 1.1.4. ...
- 【FAQ】应用集成HMS Core部分服务出现“ 6003报错”情况的解决方法来啦
背景 开发者在应用中集成HMS Core部分服务时,android sdk 以及flutter等跨平台sdk,会出现编译打包后,运行报6003错误码的情况.根据查询可以得知,错误代码 6003 表示证 ...
- navicat连接mysql报错1251的解决方法
1.新安装的mysql8,使用破解版的navicat连接的时候一直报错,如图所示: 2.网上查找原因发现是mysql8 之前的版本中加密规则是mysql_native_password,而在mysql ...
- VS2019 字符串对指针char*赋值编译器报错原因及解决方法
2019-05-26 21:55:08 前几天在敲代码时,将字符串“Hellow world!”赋值给指针char*类型指针时编译器报错的问题 网上搜索后发现 char*是历史遗留问题,如果程序修 ...
- selenium报错以及各解决方法
1.driver.findElement(By.name("wd")).sendKeys("selenium"); 报错:The method sendKeys ...
随机推荐
- [软件工程基础]2017.11.01 第五次 Scrum 会议
具体事项 燃尽图 每人工作内容 成员 已完成的工作 计划完成的工作 工作中遇到的困难 游心 #8 掌握 Laravel 框架 #10 搭建可用的开发测试环境:#9 阅读分析 PhyLab 后端代码与文 ...
- 洛谷P2473||bzoj1076 [SCOI2008]奖励关
https://www.luogu.org/problemnew/show/P2473 https://www.lydsy.com/JudgeOnline/problem.php?id=1076 不会 ...
- ctypes to load library in c/c++
cdll.LoadLibrary(...) restype (default is c_int) argtypes (what's the default? c_int?) customized da ...
- 改变滚动条的原始样式: chrome 可以改变, IE只能变相关颜色,firfox好像也不好改。最好是自己写一个或是用插件
相关作者链接地址: https://www.lyblog.net/detail/314.html 问题: 1.我在项目中遇到的问题: 在设置了::-webkit-scrollbar 后,滚动条不见了! ...
- go time笔记
package main import ( "time" "fmt" ) func main() { t := time.Now().UnixNano() fm ...
- MDX之百分比
MDX的几种百分比的计算方法 实际应用中,特别是一些分析报表,经常需要计算数据百分比.份额.平均值.累计占比等,在数据仓库飞速发展的今天,我们需要了解一些经常编写的MDX语句的写法,以满足工作中的需要 ...
- java的8大排序详解
本文转自 黑色幽默Lion的博客 http://www.cnblogs.com/pepcod/archive/2012/08/01/2618300.html 最近开始学习java,排序的部分之前学C的 ...
- CF1061B Views Matter
思路: 贪心. 实现: #include <bits/stdc++.h> using namespace std; ]; int main() { int n, m; while (cin ...
- 用CSS3和伪元素绘制三角形
具体怎样的写法,参照右边链接:https://segmentfault.com/a/1190000002783179 加以改良,不想多一个标签,可以直接利用伪元素,以下面代码为例所示: html代码: ...
- SQL问题:未启用当前数据库的 SQL Server Service Broker
数据库分离后,附加回到数据库,然后在程序中打开调用数据库的页面,出现如下问题:“未启用当前数据库的 SQL Server Service Broker,因此查询通知不受支持.如果希望使用通知,请为此数 ...