Как заставить Python csv.writer & csv.writerows писать в следующие строки вместо записи поверх предыдущих ячеек? - PullRequest
0 голосов
/ 24 мая 2019

Я пытаюсь заставить Python записать 5 строк текста в файл CSV, но не продолжать перезапись из ячейки [A1].

В настоящий момент программа может писать в первую ячейку, заполняя нужные мне переменные в текст. Хотя csv.write и csv.writerows продолжают перезаписывать данные из ячейки [A1] вместо добавления их внизу, например, ячейка [A10].

Есть ли функция, которую я могу использовать, например, чтобы пропустить ячейка [A10] каждый раз, когда она пишет в цикле, который я предоставил ниже?

Я пытался использовать функцию newline = '', но я не уверен, имеет ли это значение. Я совершенно новичок в питоне.

import csv

with open("TGC_Mailout_001_13-05-2019_retarget.csv") as file:
    reader = csv.reader(file)
    next(reader) #skip header row
    for email, name, corp in reader:
        contents = [[f'Hi {name} I hope this email finds you well.'],
                    [""],
                    [f'I was wondering if you had a chance to take a look at my previous email regarding the Wellness - Mindfulness program opportunity for {corp}.'],
                    [""],
                    ['It would be great to connect with you for a quick chat to let you know more about the program and see what you are currently doing in the space of wellness.'],
                    [""],
                    [f'With stress rising around the demanding nature of work, long hours & technology reshaping working lives (always being connected), I believe {corp} would really benefit from this program.'],
                    [""],
                    ['Kind regards']]
        retarget = open("TGC_Retarget_001_21-05-2019.csv", 'w')
        #Below block is getting py to dump the text into CSV, but it is rewriting over the text each time it reads and writes 
        #We want the below to skip to the bottom of last line of text, then keep dumping the text with new variables from CSV file 
        with retarget:
            writer = csv.writer(retarget)
            writer.writerows(contents)
            print ('Writing complete')

Желаемый выход:

Привет, Шон. Надеюсь, это письмо тебя хорошо находит.

Мне было интересно, если бы у вас была возможность взглянуть на мое предыдущее электронное письмо о возможностях программы Wellness - Mindfulness для компании.

Было бы здорово связаться с вами, чтобы поболтать, чтобы вы узнали больше о программе и увидели, что вы в настоящее время делаете в сфере здоровья.

С ростом напряженности вокруг требовательного характера работы, долгих часов и технологий, изменяющих трудовую жизнь (всегда на связи), я считаю, что Компания действительно выиграет от этой программы.

С уважением

Привет, Кэрри. Надеюсь, это письмо тебя хорошо находит.

Мне было интересно, если бы у вас была возможность взглянуть на мое предыдущее письмо о возможностях программы Wellness - Mindfulness для компании.

Было бы здорово связаться с вами, чтобы поболтать, чтобы вы узнали больше о программе и увидели, что вы в данный момент делаете в сфере велнеса.

С ростом напряженности вокруг требовательного характера работы, долгих часов и технологий, меняющих трудовую жизнь (всегда на связи), я считаю, что Компания действительно выиграет от этой программы.

С уважением

Etc. и т. д. х 100

1 Ответ

0 голосов
/ 24 мая 2019

Вы неоднократно открываете свой выходной файл в режиме w, который обрезает файл перед записью. Вместо этого откройте в режиме a (добавление):

    retarget = open("TGC_Retarget_001_21-05-2019.csv", 'a')

или, что еще лучше, откройте файл до цикла и оставьте его открытым.

import csv

with open("TGC_Mailout_001_13-05-2019_retarget.csv") as file, \
     open("TGC_Retarget_001_21-05-2019.csv", 'w') as retarget:
    reader = csv.reader(file)
    writer = csv.writer(retarget)
    next(reader) #skip header row
    for email, name, corp in reader:
        contents = [[f'Hi {name} I hope this email finds you well.'],
                    [""],
                    [f'I was wondering if you had a chance to take a look at my previous email regarding the Wellness - Mindfulness program opportunity for {corp}.'],
                    [""],
                    ['It would be great to connect with you for a quick chat to let you know more about the program and see what you are currently doing in the space of wellness.'],
                    [""],
                    [f'With stress rising around the demanding nature of work, long hours & technology reshaping working lives (always being connected), I believe {corp} would really benefit from this program.'],
                    [""],
                    ['Kind regards']]

        writer = csv.writer(retarget)
        writer.writerows(contents)
    print ('Writing complete')
...