Форум сайта python.su
0
Всем привет!
Очень нужна ваша помощь. Не могу понять в чем дело.
Суть:
у меня есть следующий список
[[['A', 0, 0, 3], ['A', 9, 0, 3], ['A', 20, 0, 3], ['A', 29, 5, 2]], [['A', 0, 0, 3], ['A', 14, 5, 3], ['A', 26, 10, 3]], [['A', 0, 0, 3], ['A', 13, 10, 3], ['A', 24, 10, 3], ['A', 30, 10, 1]], [['C', 0, 0, 3], ['C', 9, 0, 3], ['C', 22, 0, 3], ['C', 25, 0, 1], ['C', 29, 5, 1]], [['A', 0, 0, 3], ['A', 11, 10, 3], ['A', 22, 10, 3], ['A', 32, 5, 2]], [['C', 0, 0, 3], ['C', 8, 5, 3], ['C', 21, 5, 3], ['C', 28, 5, 2]], [['C', 0, 0, 3], ['C', 9, 5, 3], ['C', 18, 5, 3], ['C', 27, 5, 1]], [['C', 0, 0, 3], ['C', 7, 5, 3], ['C', 21, 5, 3], ['C', 23, 0, 1], ['C', 25, 0, 1], ['C', 27, 5, 1]], [['A', 0, 0, 3], ['A', 12, 5, 3], ['A', 26, 10, 3]], [['C', 0, 0, 3], ['C', 14, 5, 3], ['C', 28, 10, 3]]]
['C', 0, 0, 3],"['C', 12, 0, 3]","['C', 23, 0, 3]","['C', 25, 0, 1]","['C', 33, 0, 1]"
import csv #считываем данные из CSV with open('s1.csv', "r", newline="") as file: reader = csv.reader(file) for row in reader: data = [row for row in reader] print(data)
[["['A', 0, 0, 3]", "['A', 14, 5, 3]", "['A', 26, 10, 3]"], ["['A', 0, 0, 3]", "['A', 13, 10, 3]", "['A', 24, 10, 3]", "['A', 30, 10, 1]"], ["['C', 0, 0, 3]", "['C', 9, 0, 3]", "['C', 22, 0, 3]", "['C', 25, 0, 1]", "['C', 29, 5, 1]"], ["['A', 0, 0, 3]", "['A', 11, 10, 3]", "['A', 22, 10, 3]", "['A', 32, 5, 2]"], ["['C', 0, 0, 3]", "['C', 8, 5, 3]", "['C', 21, 5, 3]", "['C', 28, 5, 2]"], ["['C', 0, 0, 3]", "['C', 9, 5, 3]", "['C', 18, 5, 3]", "['C', 27, 5, 1]"], ["['C', 0, 0, 3]", "['C', 7, 5, 3]", "['C', 21, 5, 3]", "['C', 23, 0, 1]", "['C', 25, 0, 1]", "['C', 27, 5, 1]"], ["['A', 0, 0, 3]", "['A', 12, 5, 3]", "['A', 26, 10, 3]"], ["['C', 0, 0, 3]", "['C', 14, 5, 3]", "['C', 28, 10, 3]"]]
Отредактировано vesnushka.o (Май 30, 2019 20:49:39)
Прикреплённый файлы:
s1.csv (643 байта)
Офлайн
vesnushka.oВ прикрепленном файле сохранено просто текстовое представление списка (str), а не в формате csv. В csv выглядело бы примерно так:
Я его экспортирую в CSV файл, но когда открываю его, почему то появляются кавычки
A, 0, 0, 3 A, 9, 0, 3 A, 20, 0, 3 ...
[[['A'
Офлайн
0
Egorro13Получается, что данный код не подходит для записи CSV?
import csv #записываем данные в csv файл with open('s1.csv', 'w+',newline='') as csvFile: writer = csv.writer(csvFile) writer.writerows(m.data) csvFile.close()
Офлайн
vesnushka.oКак я понимаю, метод writerows просто берет поочередно каждый элемент переданной последовательности (вложенный список) и пишет в файл его строковое представление, поэтому в файл и пишутся через запятую строки
Получается, что данный код не подходит для записи CSV?
"['A', 0, 0, 3]","['A', 9, 0, 3]"...
import json data = [[['A', 0, 0, 3], ['A', 9, 0, 3], ['A', 20, 0, 3], ['A', 29, 5, 2]], [['A', 0, 0, 3], ['A', 14, 5, 3], ['A', 26, 10, 3]], [['A', 0, 0, 3], ['A', 13, 10, 3], ['A', 24, 10, 3], ['A', 30, 10, 1]], [['C', 0, 0, 3], ['C', 9, 0, 3], ['C', 22, 0, 3], ['C', 25, 0, 1], ['C', 29, 5, 1]], [['A', 0, 0, 3], ['A', 11, 10, 3], ['A', 22, 10, 3], ['A', 32, 5, 2]], [['C', 0, 0, 3], ['C', 8, 5, 3], ['C', 21, 5, 3], ['C', 28, 5, 2]], [['C', 0, 0, 3], ['C', 9, 5, 3], ['C', 18, 5, 3], ['C', 27, 5, 1]], [['C', 0, 0, 3], ['C', 7, 5, 3], ['C', 21, 5, 3], ['C', 23, 0, 1], ['C', 25, 0, 1], ['C', 27, 5, 1]], [['A', 0, 0, 3], ['A', 12, 5, 3], ['A', 26, 10, 3]], [['C', 0, 0, 3], ['C', 14, 5, 3], ['C', 28, 10, 3]]] with open('s1.json', 'w+') as f: f.write(json.dumps(data)) with open('s1.json', 'r') as f: new_data = json.load(f) print(new_data) print(data==new_data)
Отредактировано Egorro13 (Май 30, 2019 21:44:16)
Офлайн
0
Egorro13спасибо большое за ответ
import json
Офлайн
857
vesnushka.oЗапятые считаются разделителями полей в CSV. Чтобы проэкранировать запятые, нужно их заключить в двойные кавычки.
Прикреплённый файлы:
s1.csv
Офлайн
Egorro13Вчера вроде перед сном наступило то, что у алкоголиков называется просветлением: список 3-уровневый, получается что основной список содержит для writerows строки - вложенные списки, каждый такой список (т.е. строка в файле csv) содержит еще по 3-4 вложенных списка с 4 элементами каждый - эти списки и воспринимаются как значения и пишутся через запятую в кавычках. Хотя в прикрепленном файле этих кавычек почему-то нет, хотя выложенный код (“записываем данные в csv файл”) пишет именно в таком виде:
Как я понимаю, метод writerows просто берет поочередно каждый элемент переданной последовательности (вложенный список) и пишет в файл его строковое представление, поэтому в файл и пишутся через запятую строки
"['A', 0, 0, 3]","['A', 9, 0, 3]","['A', 20, 0, 3]","['A', 29, 5, 2]"
Отредактировано Egorro13 (Май 31, 2019 09:51:17)
Прикреплённый файлы:
s1.csv (723 байта)
Офлайн
857
Egorro13Для этих полей можно делать eval(). То есть можно обойтись без смены формата с CSV на JSON, чтобы эти сохранённые данные обратно восстановить. Хотя всё равно сохранение данных в CSV в таком виде некорректно в общем случае (иногда специалисту может и понадобится такое, как goto или полный копипаст кода).
пишет именно в таком виде:
Отредактировано py.user.next (Май 31, 2019 11:26:11)
Офлайн
py.user.nextСпасибо, об eval вообще никаким боком еще не слышал)) Как бы еще запомнить, наверняка где-то пригодится
Для этих полей можно делать eval().
Офлайн
0
py.user.nextспасибо, пыталась разобраться с eval(), но не понимаю где его применить
Офлайн