Найти - Пользователи
Полная версия: Python и экспорт/испорт CSV файла
Начало » Python для новичков » Python и экспорт/испорт CSV файла
1 2
vesnushka.o
Всем привет!
Очень нужна ваша помощь. Не могу понять в чем дело.
Суть:
у меня есть следующий список
 [[['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]]]
Я его экспортирую в CSV файл, но когда открываю его, почему то появляются кавычки
 ['C', 0, 0, 3],"['C', 12, 0, 3]","['C', 23, 0, 3]","['C', 25, 0, 1]","['C', 33, 0, 1]"
И если на VBA я написала как избавиться от этих кавычек. то при импорте этого файла CSV на python, они все равно появляются!
 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]"]]

Но мне нужно анализировать каждый маленький список, и эти кавычки мне мешают! Помогите, как мне от них избавиться?
Egorro13
vesnushka.o
Я его экспортирую в CSV файл, но когда открываю его, почему то появляются кавычки
В прикрепленном файле сохранено просто текстовое представление списка (str), а не в формате csv. В csv выглядело бы примерно так:
 A, 0, 0, 3
A, 9, 0, 3
A, 20, 0, 3
...
А так именно считываются значения через разделитель (по умолчанию - запятая), все эти значения считываются как строки, строки всегда обрамлены кавычками. Т.е. первое из значений в формате csv:
 [[['A'
vesnushka.o
Egorro13
Получается, что данный код не подходит для записи CSV?
 import csv #записываем данные в csv файл
with open('s1.csv', 'w+',newline='') as csvFile:
    writer = csv.writer(csvFile)
    writer.writerows(m.data)
csvFile.close()
Egorro13
vesnushka.o
Получается, что данный код не подходит для записи CSV?
Как я понимаю, метод writerows просто берет поочередно каждый элемент переданной последовательности (вложенный список) и пишет в файл его строковое представление, поэтому в файл и пишутся через запятую строки
 "['A', 0, 0, 3]","['A', 9, 0, 3]"...
При чтении через csv.reader эти значения в кавычках считываются также каждое как один элемент, хотя и содержат внутри запятые, т.е. разделители.

Как вариант, для такого многоуровневого списка можно использовать не csv, а json:
 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)
vesnushka.o
Egorro13
import json
спасибо большое за ответ
py.user.next
vesnushka.o
Прикреплённый файлы:
s1.csv
Запятые считаются разделителями полей в CSV. Чтобы проэкранировать запятые, нужно их заключить в двойные кавычки.

У тебя неправильный CSV-файл. Питон тут ни при чём.
Egorro13
Egorro13
Как я понимаю, метод writerows просто берет поочередно каждый элемент переданной последовательности (вложенный список) и пишет в файл его строковое представление, поэтому в файл и пишутся через запятую строки
Вчера вроде перед сном наступило то, что у алкоголиков называется просветлением: список 3-уровневый, получается что основной список содержит для writerows строки - вложенные списки, каждый такой список (т.е. строка в файле csv) содержит еще по 3-4 вложенных списка с 4 элементами каждый - эти списки и воспринимаются как значения и пишутся через запятую в кавычках. Хотя в прикрепленном файле этих кавычек почему-то нет, хотя выложенный код (“записываем данные в csv файл”) пишет именно в таком виде:
 "['A', 0, 0, 3]","['A', 9, 0, 3]","['A', 20, 0, 3]","['A', 29, 5, 2]"
py.user.next
Egorro13
пишет именно в таком виде:
Для этих полей можно делать eval(). То есть можно обойтись без смены формата с CSV на JSON, чтобы эти сохранённые данные обратно восстановить. Хотя всё равно сохранение данных в CSV в таком виде некорректно в общем случае (иногда специалисту может и понадобится такое, как goto или полный копипаст кода).
Egorro13
py.user.next
Для этих полей можно делать eval().
Спасибо, об eval вообще никаким боком еще не слышал)) Как бы еще запомнить, наверняка где-то пригодится
vesnushka.o
py.user.next
спасибо, пыталась разобраться с eval(), но не понимаю где его применить
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