【发布时间】:2018-01-16 16:08:01
【问题描述】:
所以我有一个包含大量数字和单词的 CSV 文件,我需要将数字截断到小数点后三位,但到目前为止我尝试过的所有操作都不起作用,因为字符串:我收到一个错误留言说 '无法将字符串转换为浮点数'。
我使用了这里建议的代码:format to 3 decimal places all decimal number in csv file python
并得到了那个错误。
代码看起来像(假设所有缩进都是正确的):
with open('metaanalysis_data.csv', 'rb') as f_input,
open('metaanalysis_datas.csv', 'wb') as f_output:
csv_input = csv.reader(f_input, quotechar="'")
csv_output = csv.writer(f_output)
csv_output.writerow(next(csv_input))
for cols in csv_input:
for i in cols:
for i in xrange(1, 10):
#if i != str:
cols[i] = '{:.3f}'.format(float(cols[i]))
csv_output.writerow(cols)
我尝试添加:
if i is float:
在 'for i in xrange(1, 10)' 之前,然后我尝试了同样的事情,它清除了我的错误消息,但导致文件根本没有被修改。
请帮忙!谢谢!
【问题讨论】:
-
您可以使用
if not isinstance(cols[i], str):,但我建议您阅读索引和数据类型,因为您的语法已关闭(您遇到了更大的问题)。您在循环中使用了两次i,即使这是正确的,测试i的type也没有意义,因为那只是您的索引变量。此外,您正在读取和写入同一个文件,这绝对是糟糕的。最后,我们不能只是“假设所有缩进都是正确的。” -
添加您建议的行不会导致错误消息,但也不会导致我的小数被四舍五入或截断。此外,如果您更仔细地查看代码,您会看到我正在读取和写入两个不同的文件。我之所以这么说是关于缩进,是因为我不知道如何在缩进完整的情况下复制和粘贴,并且我想明确指出缩进不是问题。
-
你是对的——当我注意到文件名不同时,编辑我的帖子已经太晚了。然而,缩进对 python 来说很重要——你可以使用空格手动将它们添加到你的帖子中。你能提供一个小样本输入和所需的输出吗?