Записать в c строки в файл Excel CSV python без перезаписи других столбцов. python - PullRequest
0 голосов
/ 06 апреля 2020

У меня есть CSV-файл с формулами в столбцах 4, 5 и 6,

Я также хочу импортировать данные из программы python в столбцы 1, 2 и 3. Однако каждый раз, когда я делаю это используя такие функции записи или добавления, файл просто переписывает формулы в 4,5 и 6.

Есть ли способ предотвратить это?

from cv2 import cv2 as cv2
import numpy as np
import time
import math
import csv
from csv import DictWriter

#Reading the file first will check to make sure the file exists in the corresponding name format. 
with open('wagonFrontData.csv', 'r') as userFile: 
    userFileReader = csv.reader(userFile)


# Note: when writing to a csv file the already existing file must be closed before working with the program
with open('wagonFrontData.csv', 'r', newline='') as f:
    fieldnames=['X_Old', 'Y_Old','X_New', 'Y_New']
    theWriter=csv.DictWriter(f, fieldnames=fieldnames)
    # theWriter.writeheader()

#Function for appending data to the csv file.    

def append_dict_as_row(file_name, dict_of_elem, field_names):
    # Open file in append mode
    with open(file_name, 'a+', newline='') as write_obj:
        # Create a writer object from csv module
        dict_writer = DictWriter(write_obj, fieldnames=field_names)
        # Add dictionary as wor in the csv
        dict_writer.writerow(dict_of_elem)


# specify the csv file to write to. 
# parameter values https://www.w3schools.com/python/ref_func_open.asp 
# https://docs.python.org/3/library/csv.html
while(1):


    XOld=[1,2,3,4]
    YOld=[2,3,4,5]
    XNew=[3,6,7,8]
    YNew=[4,4,6,7]

    for i in range(0, len(XOld)):
        row=({'X_Old':(XOld[i]), 'X_New':(XNew[i]), 'Y_Old':(YOld[i]), 'Y_New':(YNew[i])})
        # print(row) 
        append_dict_as_row('wagonFrontData.csv',row,fieldnames)     

1 Ответ

0 голосов
/ 06 апреля 2020

Добро пожаловать в переполнение стека! Описанная вами проблема не соответствует предоставленному вами коду. Я приведу здесь решение проблемы, которую вы описали:

  • Вы хотите сохранить значения de из столбцов 4, 5, 6
  • Вы хотите вставить новые значения в столбец 1, 2, 3

Настоятельно не рекомендуется читать и записывать в файл одновременно (если вы действительно не знаете, что делаете). Поэтому здесь, в моем решении, я запишу во временный файл, и когда все будет готово, я переименую этот временный файл в имя исходного файла, чтобы перезаписать его. Я также предполагаю, что значения, которые вы хотите вставить в 3 первых столбца, находятся в переменной values_generated_to_insert_in_output

import csv
import os

values_generated_to_insert_in_output = [
    ['missile', 'claim', 'winter'],
    ['screw', 'mill', 'mean'],
    ['privilege', 'deadly', 'tap'],
    ['conference', 'intermediate', 'tune'],
]

with open('wagonFrontData.csv', newline='') as input_file:
    csv_reader = csv.reader(input_file)
    with open('output_file.csv', 'w', newline='') as output_file:
        csv_writer = csv.writer(output_file)
        for (old_colums, new_colums) in zip(csv_reader, 
                                            values_generated_to_insert_in_output):
            row_to_output = list(new_colums).extend(old_colums[3:6])
            csv_writer.writerow(row_to_output)

os.replace('output_file.csv', 'wagonFrontData.csv')

Это то, что вы хотели сделать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...