使用Python中的CSV模块替换零

时间:2015-04-07 03:28:47

标签: python csv

这可能看起来很奇怪,但我基本上有一个csv文件,其值为' 0'在很多细胞中。

我如何在Python中将这些数字转换为0.00而不是0?我在ArcMap中有一个脚本需要将值读取为double而不是short整数,并且' 0'价值真的搞砸了。

我是CSV模块的新手,所以我不知道该怎么做。任何帮助制作脚本转换我的值,以便当我打开新的CSV时,它将读取" 0.00"而不是' 0'非常感谢。

我希望有一些代码可以作为一个例子,但我不知所措。

2 个答案:

答案 0 :(得分:1)

这是一个简短的脚本,它将读取CSV文件,将任何数字转换为浮点数,然后再将其写回同一文件。

import csv
import sys

# These indices won't be converted
dont_touch = [0]
def convert(index, value):
    if not index in dont_touch:
         try:
              return float(value)
         except ValueError:
              # Not parseable as a number
              pass
    return value

table = []
with open(sys.argv[1]) as f:
    for row in csv.reader(f, delimiter=","):
        for i in range(len(row)):
            row[i] = convert(i, row[i])
                table.append(row)

with open(sys.argv[1], "w") as f:
    writer = csv.writer(f, delimiter=",")
        writer.writerows(table)

如果您有任何不应转换的列,请在dont_touch数组中指定其索引。

如果你希望它们有两个尾随零,你可以改为使用格式字符串:

return "{:.02f}".format(float(value))

答案 1 :(得分:0)

您可以格式化0然后将其写出来,您可能需要查看适合您的csv的引用(例如,您的编写器对象中可能需要quoting=csv.QUOTE_NONE):

reader = csv.reader(fr)
writer = csv.writer(fw)
for row in reader:
    writer.writerow([f if f != '0' else '{:0.2f}'.format(0) for f in row])