对csv列进行操作后如何覆盖它们?



我有几个csv文件,每个有3列。我想将第三列与一个值进行比较,如果该值大于该值,则从该元素中减去该值,并将结果覆盖到现有的csv第三列。

我不想修改前两列。到目前为止,我已经这样做了:

import csv
import os
value = 10
with open('1new.csv', 'w') as outp, open('1.csv', 'r') as inp:
writer = csv.writer(outp, delimiter=',')
for row in csv.reader(inp):
if int(row[2]) > value:
row[2] = int(row[2]) - value
else:
row[2] = row[2]
writer.writerow(int(row[2])
os.rename('1new.csv', '1.csv')

打印行[2]后,我知道减法工作OK,但我不能覆盖列,我想知道如何为多个csv文件做覆盖,而不是手动重命名输入文件。这是我第一次使用python和csv文件,任何帮助都是感激的。

无需打开两个文件,只需对一个文件进行操作,但只需将"读取"与"文件"分开。块和写入文件"块。

import csv
value = 10
with open('001.csv', 'r') as inp:
data = list(csv.reader(inp))  # converting to list for easy modification
for row in data:
if int(row[2]) > value:
row[2] = int(row[2]) - value
else:
row[2] = row[2]
with open('001.csv', 'w') as outp:
writer = csv.writer(outp)
writer.writerows(data)    # note writerows() method for multiple row entry from an iterable like list

这不会创建新文件,而是覆盖现有文件。

但注意:这实际上并没有覆盖一列,而是覆盖整个文件。

使用python中的pandas包可以更方便地完成这些工作,它可以节省许多行代码。

您可以首先读取文件并将修改后的文件内容存储在临时列表中,然后将该列表保存在现有文件中。这样它就会用修改过的内容覆盖原始内容。看一下代码。

import csv
import os
value = 10
temp=[] 
with open('001new.csv') as csv_file:
csv_reader = csv.reader(csv_file, delimiter=',')
for row in csv_reader:
if int(row[2]) > value:
row[2] = int(row[2]) - value
else:
row[2] = row[2]
temp.append(row)
with open('001new.csv', mode='w') as outp:
writer = csv.writer(outp, delimiter=',')
writer.writerows(temp)

最新更新