Python CSV文件阅读器:高数字的坏单元格格式

时间:2014-04-09 18:19:32

标签: python csv format

我使用python的csv文件阅读器来读取csv文件。我的代码如下:

with open(self.csv_file, 'rb') as csvfile:
        data = list(csv.reader(csvfile, delimiter=';'))

除了我的csv文件的一列之外,一切正常。我有浮点数在1和-1之间的列(例如:0,34430203959)并且它完美地工作但我的一个列处理非常高的数字(例如:142266963436)。因为文件的单元格被格式化为"标准",我的CSV文件编号为142266963436,为142.266.963.436(如下图所示):

enter image description here

有问题。当我解析我的CSV文件时,他处理小数字没有问题,因为只有一个"。"但是当我用很多"解析高数字时。" python将它们解释为" float"并把"。"在第一个号码之后。

所以,而不是数字:

142266963436

我有号码:

1.42266963436

任何人都知道如何解决这个问题?

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

您的CSV文件包含奇怪的内容;看起来您的所有z列都受到了影响(截图中为ankle_pos.ztoe_pos.z)。如果您确定这些值是浮点数,那么您可以使用Python来“修复”这些值:

import csv

def repaired_float(c):
    try:
        return float(c)
    except ValueError:
        # interpret ddd.ddd.ddd.ddd as 0.ddddddddd instead
        return float('.{}'.format(c.replace('.', ''))

with open(filename, 'rb') as infh:
    reader = csv.reader(infh)
    next(reader, None)  # skip header row
    for row in reader:
        row = map(repaired_float, row)
        # do something with row 

如果您想将这些值解释为(大)整数,请将repaired_float()中的最后两行替换为:

# interpret ddd.ddd.ddd.ddd as ddddddddd instead
return int(c.replace('.', ''))