добавить заголовок легко: напишите заголовок перед вызовом copy_expert
.
with open(path, 'w') as csvfile:
writer = csv.writer(csvfile)
writer.writerow(["my","super","header"])
self.cursor.copy_expert(copy_sql, csvfile)
Но добавить столбец невозможно без повторного чтения файла и добавления информации о каждой строке, поэтому приведенное выше решение мало чем поможет.
Если файлне слишком большой и умещается в памяти, вы можете записать вывод sql в «поддельный» файл:
import io
fakefile = io.StringIO()
self.cursor.copy_expert(copy_sql, fakefile)
теперь перемотайте файл и проанализируйте его как csv
, добавьте дополнительный столбец при записиобратно
import csv
fakefile.seek(0)
with open(path, 'w', newline="") as csvfile:
writer = csv.writer(csvfile)
reader = csv.reader(fakefile) # works if copy_expert uses "," as separator, else change it
writer.writerow(["my","super","header","UAL"])
for row in reader:
writer.writerow(row+[30000])
или вместо внутреннего цикла:
writer.writerows(row+[30000] for row in reader)
А если файл слишком большой, запишите его во временный файл и продолжайте в том же духе (менее производительный)