读取一个csv文件,在行/单元格中插入新计算的值,然后覆盖相同的csv文件

时间:2019-05-05 04:18:16

标签: python loops csv insert append

我想读取一个名为Books.csv的csv文件,该文件包含多行,并在第19行之后插入新行。每行值仅限于其第一个单元格(A1至A24)。

我已经计算/迭代了一个由30行组成的名为“ c”的字符串。

import csv

variant = "VC4"
MET = "cutting.MET"
name = "Rob"
Base_ModQual = -0.8
Deg_rate = 0.30
Num_Years = 30


for i in range(Num_Years+1):
    deg = (Base_ModQual + (i)*Deg_Rate)
    c = ("SIM_" + str(i+2) + ";" + variant + ";" + MET + ";" + name + "_Year" + str(i) + "_" + f'{deg:.2f}' + "%modrate.csv" +";" + f'{deg:.2f}' +";")
    print(c)

任务::在csv文件中从第20行(单元格A20)到第50行(单元格A50)插入字符串“ c”,以使原始A20-A24单元格分别转换为A51-A55单元格

with open('Books.csv', 'r') as csv_file, open('Books.csv', 'a') as write_file:
       reader = csv.reader(csv_file, delimiter =";")
       j = 0
       for row in reader: 
          if j < row[19]:
             row.append(c)               
             print(row)

我无法插入新行并用新数据覆盖books.csv。

编辑:这是Books.csv文件的屏幕截图。我想从A20开始插入内容。

enter image description here

1 个答案:

答案 0 :(得分:2)

我认为无法同时读取和追加文件,但是您的文件似乎不大,因此也许首先读取它的内容并追加新行并随后保存?

修改

感谢截图。好像;不是列定界符,因为单元格内的值还包含;。分隔符可能是,,但我认为这并不重要,因为如果我理解正确的话,您只想将行保持为 。因此,不需要csv.reader,只需使用readlines()阅读纯文本中的行,例如:

import csv

variant = "VC4"
MET = "cutting.MET"
name = "Rob"
Base_ModQual = -0.8
Deg_rate = 0.30
Num_Years = 30

INSERT_ROW = 20

new_content = []
with open('Books.csv', 'r') as csv_file:
    #reader = csv.reader(csv_file, delimiter =',')
    reader = csv_file.readlines()
    for i, row in enumerate(reader):
        if i == INSERT_ROW:
            for i in range(Num_Years+1):
                deg = (Base_ModQual + (i)*Deg_rate)
                c = ("SIM_" + str(i+2) + ";" + variant + ";" + MET + ";" + name + "_Year" + str(i) + "_" + f'{deg:.2f}' + "%modrate.csv" +";" + f'{deg:.2f}' +";")
                new_content.append(c + '\n')
        else:
            new_content.append(row)

with open('Books.csv', 'w') as csv_file:
    for line in new_content:
        csv_file.write(line)