问题

我在用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

展望

我想除了'.'的问题之外,可能还会有各种奇葩的问题,同样可以通过修改库文件的方法,直接将无法处理的字符串或信息,转换成你想要得到的信息,比如我这里是"."到".",虽然都是“.”,但是结果完全不一样,至少不会报错,对于问题的解决也挺直接的。

希望能解决读者的问题。有其他的问题可以通过回复或者私聊我。

最新文章

  1. C# .Net :Excel NPOI导入导出操作教程之将Excel文件读取并写到数据库表,示例分享
  2. C#进阶系列——DDD领域驱动设计初探(四):WCF搭建
  3. Effective Java Second Edition --- Builder Pattern
  4. 电脑重装系统后如何恢复Mysql数据库
  5. EF 未应用自动迁移,因为自动迁移会导致数据丢失的解决办法
  6. Linux 文件与目录管理
  7. BIOS 深入学习 转
  8. iOS(Swift) TextField限制输入文本的长度(不是字数)
  9. 一些实用而又记不住的css技巧
  10. JavaScript学习笔记(十)——高阶函数之map,reduce,filter,sort
  11. js获取地址栏URL上的参数
  12. centos/redhat命令行上传下载文件
  13. 机器学习——KNN算法(k近邻算法)
  14. JS浅谈原始值与引用值操作
  15. Spring错误小结
  16. 完善mui的tap及longtap点击效果
  17. Socket网络编程--聊天程序(1)
  18. JAVA基础知识总结:十七
  19. 第17课-数据库开发及ado.net 聚合函数,模糊查询like,通配符.空值处理.order by排序.分组group by-having.类型转换-cast,Convert.union all; Select 列 into 新表;字符串函数;日期函数
  20. maven-war-plugin 插件 web.xml 缺失时忽略

热门文章

  1. [題解](水/并查集)luogu_P2170選學霸
  2. wawawa8的模板复习计划
  3. HDU - 6312( 2018 Multi-University Training Contest 2)
  4. 洛谷 P2260 [清华集训2012]模积和 || bzoj2956
  5. 关于JVM的一些东西
  6. 轻松把玩HttpClient之配置ssl,采用绕过证书验证实现https
  7. jquery select 列表 ajax 动态获取数据 模糊查询 分页
  8. [已读]CSS禅意花园
  9. springmvc整合elasticsearch
  10. appcloud 加载第三方页面loading效果