数字大于特定数字的Python CSV编辑字段

时间:2014-04-17 16:28:23

标签: python python-2.7 csv

我有一个包含距离矩阵的csv文件,其部分看起来像是

enter image description here

有许多字段包含大于1000000的数字,我想编写一个python脚本,将矩阵中大于1000000的数字更改为零。

这是我的脚本,我不知道如何在这些字段中写入零

import csv

f = open('distMatrix.csv', 'rb')
csvreader = csv.reader(f)
element = list(csvreader)

i = 0
j = 0
while i <= 55:                            #this is a 56 * 56 matrix
    while j <= 55:
        while element[i][j] >= 1000000:
            element[i][j] = 0
        j = j + 1
    i = i + 1

随意提出建议,谢谢。

我在Windows 8.1 x64下使用python 2.7.4。


更新#1

我使用以下代码获得我想要的东西(谢谢,unutbu!),

import csv
import tempfile
import shutil
import os
os.chdir('C:\Users\Heinz\Desktop')

filename = 'distMatrix.csv'
with open(filename, 'rb') as f, tempfile.NamedTemporaryFile(mode='wb', delete=False) as g:
    writer = csv.writer(g, delimiter = ',')
    for row in csv.reader(f):
        row = [element if float(element) < 10**6 else 0 for element in row]
        writer.writerow(row)

shutil.move(g.name, filename)

已编辑的CSV看起来像

enter image description here

我刚编辑了unutbu脚本的一小部分,Martijn Pieters,感谢给我一个类似的例子。

1 个答案:

答案 0 :(得分:3)

import csv
import tempfile
import shutil

filename = 'distMatrix.csv'
with open(filename, 'rb') as f, tempfile.NamedTemporaryFile(mode='wb', delete=False) as g:
    writer = csv.writer(g)
    for row in csv.reader(f):
        row = [element if int(element) < 10**6 else 0 for element in row]
        writer.writerow(row)

shutil.move(g.name, filename)