Форум сайта python.su
День Добрый!
Скрипт делает запрос в БД и сохраняет это в csv файл, но вот задача первую колонку в самом csv файле привести к виду 12-34-56-78-90
сам код
cur.execute('SELECT dogovor, number, rub, kop FROM dolg') rows = cur.fetchall() for row in rows: fp = open('dolg.csv', 'w') my_file = csv.writer(fp, delimiter='\t', lineterminator='\n') my_file.writerows(rows)
lst0 = ('-'.join(row[0][i:i + 2] for i in range(0, len(row[0]), 2))) print(lst0, row[1], row[2], row[3])
Офлайн
kipalexТак надо писать каждый ряд отдельно, а не все ряды сразу. Зачем ты ряды пишешь все столько раз, сколько там рядов вообще? Видимо, ошибка это логическая в алгоритме у тебя.
При таком раскладе значение в поле dogovor как есть так и пишется.
>>> import re >>> >>> row = ['1234567890', '1', '123', '456'] >>> >>> row_new = ['-'.join(re.findall(r'..', row[0]))] + row[1:] >>> >>> row ['1234567890', '1', '123', '456'] >>> row_new ['12-34-56-78-90', '1', '123', '456'] >>>
Отредактировано py.user.next (Фев. 6, 2023 10:32:21)
Офлайн
Мы не поняли друг друга сделать можно по-разному. Сейчас у меня получается как на картинке почему команда print выдает правильный вариант, а при записи в файл уже не то.
import csv def ReadCSV(): with open('dolg.csv') as File: reader = csv.reader(File, delimiter='\t') for row in reader: # Через срез data = [('-'.join(row[0][i:i + 2] for i in range(0, len(row[0]), 2))), row[1], row[2], row[3]] # Выводит как надо print(data) my_file = open('example2.csv', 'w') with my_file: writer = csv.writer(my_file, delimiter='\t') writer.writerows(data) print("Writing complete") if __name__ == '__main__': ReadCSV()
Прикреплённый файлы: Screenshot 2023-02-06 at 12.58.00.png (68,2 KБ)
Офлайн
kipalexЯ же дал пример, ты его не читал вообще?
Мы не поняли друг друга сделать можно по-разному.
>>> import io >>> >>> stream = io.StringIO() >>> >>> import csv >>> >>> data = ['12-34-56-78-90', 'a', 'b', 'c'] >>> >>> writer = csv.writer(stream, delimiter='\t') >>> writer.writerows(data) >>> >>> stream.seek(0) 0 >>> stream.read() '1\t2\t-\t3\t4\t-\t5\t6\t-\t7\t8\t-\t9\t0\r\na\r\nb\r\nc\r\n' >>>
>>> import io >>> >>> stream = io.StringIO() >>> >>> import csv >>> >>> data = ['12-34-56-78-90', 'a', 'b', 'c'] >>> >>> writer = csv.writer(stream, delimiter='\t') >>> writer.writerow(data) 22 >>> >>> stream.seek(0) 0 >>> stream.read() '12-34-56-78-90\ta\tb\tc\r\n' >>>
Отредактировано py.user.next (Фев. 6, 2023 11:50:30)
Офлайн
py.user.nextТолько у меня как раз и указано что все элементы:
Вот
Офлайн
kipalexНу, я вижу, что у тебя writerows(), когда там должно быть writerow().
Только у меня как раз и указано что все элементы:
kipalexА зачем ты написал row, если он тебе не нужен типа? Зачем этот цикл вообще написан?for row in reader:
Отредактировано py.user.next (Фев. 6, 2023 13:39:37)
Офлайн
kipalex
Скрипт делает запрос в БД и сохраняет это в csv файл, но вот задача первую колонку в самом csv файле привести к виду 12-34-56-78-90
rows = cur.fetchall()
Офлайн