Найти - Пользователи
Полная версия: Подскажите по коду
Начало » Python для новичков » Подскажите по коду
1
kipalex
День Добрый!

Скрипт делает запрос в БД и сохраняет это в 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)

При таком раскладе значение в поле dogovor как есть так и пишется. Если туда записано 1234567890 то оно так и будет, надо чтобы в файл уже переформатированное записалось смотрел в сторону среза

                 lst0 = ('-'.join(row[0][i:i + 2] for i in range(0, len(row[0]), 2)))
                print(lst0, row[1], row[2], row[3])
Получается то что надо - вставляется после каждого второго символа. А вот как это в коде реализовать что-то второй день не соображу.
py.user.next
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']
>>>
kipalex
Мы не поняли друг друга сделать можно по-разному. Сейчас у меня получается как на картинке почему команда 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()
py.user.next
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'
>>>

Вот один метод.
Вот другой метод.

Это разные методы. Прочитай сначала документацию, прежде чем их использовать. Потому что ты не знаешь, что ты делаешь, из-за того, что не читал этого всего.
kipalex
py.user.next
Вот
Только у меня как раз и указано что все элементы:
csvwriter.writerows(rows) - writer.writerows(data)
Write all elements in rows (an iterable of row objects as described above) to the writer’s file object, formatted according to the current dialect.
py.user.next
kipalex
Только у меня как раз и указано что все элементы:
Ну, я вижу, что у тебя writerows(), когда там должно быть writerow().

Вот ты написал
kipalex
  
for row in reader:
А зачем ты написал row, если он тебе не нужен типа? Зачем этот цикл вообще написан?

Похоже, что ты вообще не понимаешь, что ты пишешь.
xam1816
kipalex
Скрипт делает запрос в БД и сохраняет это в csv файл, но вот задача первую колонку в самом csv файле привести к виду 12-34-56-78-90
 rows = cur.fetchall()
выложите что в rows, хотя бы первую строку

в каком виде нужно получить csv, написать руками, приложить
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB