@JyriG

Csv Writer игнорирует записывание ~1% от итераций, что делать?

Итак, пишу код по обновлению данных товаров в Jupyter notebook, на питоне.
Проблема вот в чем. Этот код:

c = open("c_pr.csv",'w',encoding='utf-8')
csv_writer = csv.writer(c)
csv_writer.writerow(["0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31","32","33","34","35"])

with open("c_variable.csv",encoding="utf8") as f1, open("c_variation.csv",encoding="utf8") as f2:
    rd1, rd2 = csv.reader(f1),list(csv.reader(f2))
    for row1 in rd1:
        for row2 in rd2:
            if(str(row1[2]) == str(row2[4])):
                row1[29]+="," + str(row2[29])
                row1[20]+="," + str(row2[20])
                csv_line = [row2[1],row2[2],row2[3],row2[4],row2[5],row2[6],row2[7],row2[8],row2[9],row2[10],row2[11],row2[12],row2[13],row2[14],row2[15],row2[16],row2[17],row2[18],row2[19],row2[20],row2[21],row2[22],row2[23],row2[24],row2[25],row2[26],row2[27],row2[28],row2[29],row2[30],row2[31],row2[32],row2[33],row2[34],row2[35]]
                csv_writer.writerow(csv_line)
        csv_line = [row1[1],row1[2],row1[3],row1[4],row1[5],row1[6],row1[7],row1[8],row1[9],row1[10],row1[11],row1[12],row1[13],row1[14],row1[15],row1[16],row1[17],row1[18],row1[19],row1[20],row1[21],row1[22],row1[23],row1[24],row1[25],row1[26],row1[27],row1[28],row1[29],row1[30],row1[31],row1[32],row1[33],row1[34],row1[35]]
        csv_writer.writerow(csv_line)
        
print(row1[2]) # Выводит YYCHI

или вот такой вот код:
c = open("c_pr.csv",'w',encoding='utf-8')
csv_writer = csv.writer(c)
csv_writer.writerow(["0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31","32","33","34","35"])

with open("c_variable.csv",encoding="utf8") as f1, open("c_variation.csv",encoding="utf8") as f2:
    rd1, rd2 = csv.reader(f1),list(csv.reader(f2))
    x=0
    y=0
    lines = []
    lines2 = []
    for row1 in rd1:
        x+=1
        for row2 in rd2:
            if(str(row1[2]) == str(row2[4])):
                y+=1
                row1[29]+="," + str(row2[29])
                row1[20]+="," + str(row2[20])
#                 csv_line = [row2[2]]
                csv_line = [row2[1],row2[2],row2[3],row2[4],row2[5],row2[6],row2[7],row2[8],row2[9],row2[10],row2[11],row2[12],row2[13],row2[14],row2[15],row2[16],row2[17],row2[18],row2[19],row2[20],row2[21],row2[22],row2[23],row2[24],row2[25],row2[26],row2[27],row2[28],row2[29],row2[30],row2[31],row2[32],row2[33],row2[34],row2[35]]
                lines2.append(csv_line)
                if(y==100):
                    csv_writer.writerows(lines2)
                    lines2 = []
                    y=0
        csv_line = [row1[1],row1[2],row1[3],row1[4],row1[5],row1[6],row1[7],row1[8],row1[9],row1[10],row1[11],row1[12],row1[13],row1[14],row1[15],row1[16],row1[17],row1[18],row1[19],row1[20],row1[21],row1[22],row1[23],row1[24],row1[25],row1[26],row1[27],row1[28],row1[29],row1[30],row1[31],row1[32],row1[33],row1[34],row1[35]]
#         csv_line = [row1[1],row1[2]]
        lines.append(csv_line)
        if(x==100):
            csv_writer.writerows(lines)
            lines = []
            x=0
        
row1[2]
csv_writer.writerows(lines)
time.sleep(5)
csv_writer.writerows(lines2)


Берет файл с данными товаров типа variable и файл с данными товаров типа variation (потом они станут товарами в интернет-магазине), и добавляет атрибуты с variation к товарам variable, если их артикулы (SKU) совпадают.

В файле c_variable.csv - 2568 строк, в последней строке товар с артикулом YYCHI.
в файле c_variation.csv - 6144 строк, в последней строке товар с артикулом YYCHI/RED.

В новом файле c_pr.csv должно быть 8712 (=6144+2568) строк. Последняя строка - YYCHI. Предпоследняя - YYCHI/RED. Забегая вперед, он правильно и записывает, если дождаться выполнения скрипта и запустить опять. Но это не выход, скрипт будет поставлен в вечный цикл в продакшене.

Если я нажму традицонно на ""Restart Kernel and Run all" или запускаю файл.py через консоль в происходит что-то странное... В файле c_pr.csv 8695 строк, последние строки не YYCHI, а товар на 17. месте с конца. Команда print все ещё выводит артикул YYCHI. Что не так? Почему он не может правильно записать YYCHI и последние строки с конца, которые тоже не записаны? Он ведь по идее должен пройтись по всем строкам?

* Формат строк ничем не отличается друг от друга, это уже проверил
* time.sleep не помогает
* Try: Except: тоже не помогает.

Парюсь над вопросом третий день. Есть идеи, как исправить?
  • Вопрос задан
  • 54 просмотра
Пригласить эксперта
Ответы на вопрос 1
Lord_of_Rings
@Lord_of_Rings
Python developer
Попробуйте в конце поставить c.close()
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы