Прочитайте CSV-файл, вставьте заново вычисленные значения в строки / ячейки и перезапишите тот же CSV-файл. - PullRequest
0 голосов
/ 05 мая 2019

Я хочу прочитать CSV-файл с именем Books.csv, который содержит несколько строк, и вставить новые строки после номера строки 19. Каждое значение строки ограничено его первой ячейкой (от A1 до A24).

Я вычислил / повторил строку с именем "c", состоящую из 30 строк.

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)

ЗАДАЧА: вставить строку "c" в файл csv из строки 20 (ячейка A20) в строку 50 (ячейка A50) таким образом, чтобы исходные ячейки 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 Ответ

2 голосов
/ 05 мая 2019

Я не думаю, что его можно читать и добавлять одновременно, но ваш файл не кажется большим, поэтому, возможно, сначала прочитайте его содержимое, добавьте новые строки и сохраните потом?

Редактировать

Спасибо за скриншот.Похоже, ; не является разделителем столбца, потому что значения внутри ячеек также содержит ;.Ограничитель, вероятно, ,, но я не думаю, что это имеет значение, потому что - если я вас правильно понял - вы просто хотите сохранить строки такими, как они .Поэтому нет необходимости в 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)

...