Экпорт данных из Postgresql в файл

Ariki
Гуру
Сообщения: 706
Зарегистрирован: 12 янв 2011, 22:40
Проекты: 1
Репутация: 282
Ваше звание:

Re: Экпорт данных из Postgresql в файл

Сообщение Ariki » 29 июн 2016, 19:04

Странно, прямому слэшу там взяться неоткуда. Его точно нет в самих данных? У меня все строки с кавычками экспортировались адекватно. Команда COPY преобразовала их в двойные кавычки в файле CSV, а скрипт - обратно в одинарные.

kasandra
Активный участник
Сообщения: 140
Зарегистрирован: 09 апр 2014, 11:33
Репутация: 2

Re: Экпорт данных из Postgresql в файл

Сообщение kasandra » 30 июн 2016, 09:40

Вы правы, там прямого слеша нет. Это моя ошибка была. Благодарю за скрипт.



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

Ariki
Гуру
Сообщения: 706
Зарегистрирован: 12 янв 2011, 22:40
Проекты: 1
Репутация: 282
Ваше звание:

Re: Экпорт данных из Postgresql в файл

Сообщение Ariki » 30 июн 2016, 11:35

Можно, конечно. Замените выражение, в котором формируется имя файла,

Код: Выделить всё

output_prefix + '_{0:06d}.txt'.format(i)
на или, если хотите добавить путь к каталогу и расширение, на что-нибудь вроде

Код: Выделить всё

'{0}/{1}.txt'.format(output_prefix, row[1])

kasandra
Активный участник
Сообщения: 140
Зарегистрирован: 09 апр 2014, 11:33
Репутация: 2

Re: Экпорт данных из Postgresql в файл

Сообщение kasandra » 30 июн 2016, 18:26

Пробовала писать так:

Код: Выделить всё

import csv
import sys

input_filename = sys.argv[1]
output_prefix = sys.argv[2] if len(sys.argv) > 2 else 'output'

with open(input_filename, 'rb') as input_file:
    reader = csv.reader(input_file, delimiter='\n', quotechar='"')
    for i, row in enumerate(reader):
        with open(row[1], 'w') as output_file:
            output_file.write(row[0])
И так:

Код: Выделить всё

import csv
import sys

input_filename = sys.argv[1]
output_prefix = sys.argv[2] if len(sys.argv) > 2 else 'output'

with open(input_filename, 'rb') as input_file:
    reader = csv.reader(input_file, delimiter='\n', quotechar='"')
    for i, row in enumerate(reader):
        with open('{0}/{1}.txt'.format(output_prefix, row[1]), 'w') as output_file:
            output_file.write(row[0])
В обоих случаях пишет, что list index out of range. То есть не видит второй столбец, если я верно понимаю. Но я пробовала разный разделитель использовать в csv файле и просто в ручную создавать произвольный документ, не срабатывает.

А если заменить на row[0], то пишет, что не находит файл с указаным именем.

Что я сделала не верно?

Ariki
Гуру
Сообщения: 706
Зарегистрирован: 12 янв 2011, 22:40
Проекты: 1
Репутация: 282
Ваше звание:

Re: Экпорт данных из Postgresql в файл

Сообщение Ariki » 30 июн 2016, 19:25

Это я забыл про разделитель. В скрипте поменяйте delimiter='\n' на delimiter=',' или что вы там используете в качестве разделителя.

kasandra
Активный участник
Сообщения: 140
Зарегистрирован: 09 апр 2014, 11:33
Репутация: 2

Re: Экпорт данных из Postgresql в файл

Сообщение kasandra » 30 июн 2016, 20:17

Все работает отлично, благодарю за помощь. :D

Ответить

Вернуться в «PostGIS/PostgreSQL»