【发布时间】:2016-10-24 18:19:02
【问题描述】:
我有一个包含一堆数据的 CSV,我需要更改特定行和列中的数据。我能够通读文件,找到我需要更改的行、列、更改数据,但我不知道如何将更改提交到内存并正确重写 CSV。
以下代码没有失败,但它不正确。它没有提交我对列 (col) 所做的更改,而是复制了我想要更改的行。数据没有改变,现在我只是在我想要更改的地方有重复的行。
import csv
import re
from tempfile import NamedTemporaryFile
import shutil
csvName = raw_input("Enter the filename: ")
tempfile = NamedTemporaryFile(delete=False)
newSize = 0
newArea = 0
with open(csvName, 'rb') as readCSV, tempfile:
reader = csv.reader(readCSV)
writer = csv.writer(tempfile)
for row in reader:
for col in row:
if col.startswith('Connection:'):
print col
if col.startswith('Size:'):
print "Current", col
newSize = raw_input("Enter new size: ")
newArea = int(newSize)*int(newSize)
col = re.sub('[0-9]+', newSize, col)
writer.writerow(row)
if col.startswith('Area:'):
col = re.sub('[0-9]+', str(newArea), col)
writer.writerow(row)
writer.writerow(row)
shutil.move(tempfile.name, csvName)
这是需要更改的一位数据的示例:
连接:D14Conn 类型:B2B 尺寸:140 几何形状:方形 面积:19600
我上面的代码将简单地将新行复制到此数据中,并且我对 col 所做的更改未提交 - 如下所示
连接:D14Conn 类型:B2B 尺寸:140 尺寸:140 几何形状:方形 面积:19600 面积:19600
【问题讨论】: