Итак, пишу код по обновлению данных товаров в 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: тоже не помогает.
Парюсь над вопросом третий день. Есть идеи, как исправить?