Я работаю с Python 2.7 под Ubuntu 18.04, и я обрабатываю некоторые данные из CSV-файла. Чтобы передать их в моем сценарии, мне нужно, чтобы они были в списке в определенном формате. Вот как это должно выглядеть:
data = [(ཋ', ཆ', ཇ', ཌྷ'),
(ཎ', ཎ', ཌྷ', ཎ'),
(', ཌྷ', ཌྷ', ཎ'),
(ཊ', ', ཌྷ', ཊ'),
(ཋ', ཇ', ཏ', ཌྷ')]
каждое «значение», содержащееся в файле .csv, представляет собой серию чисел, окруженных () как это »(« 15 »,« 10 »,« 11 »,« 17 »)».
мой. CSV-файл выглядит так:
(ཋ', ཆ', ཇ', ཌྷ');
(ཎ', ཎ', ཌྷ', ཎ');
(', ཌྷ', ཌྷ', ཎ');
(ཊ', ', ཌྷ', ཊ');
(ཋ', ཇ', ཏ', ཌྷ')
и скрипт, читающий файл csv, следующий:
import csv
data = []
with open('logsTESTII.csv', 'r') as f:
reader = csv.reader(f, delimiter = '')
for row in reader:
data.append(list(reader))
print (data)
независимо от того, что я делаю, я пробовал много вариантов этого скрипта или файловой структуры .csv, я всегда получаю такие странные результаты:
[[["(ཎ', ཎ', ཌྷ', ཎ')", ''], ["(', ཌྷ', ཌྷ', ཎ')", ''], ["(ཊ', ', ཌྷ', ཊ')", ''], ["(ཋ', ཇ', ཏ', ཌྷ')"], [], []]]
Мне просто нужен список со всеми моими данными, один за другим разделенный запятой.
Как я могу продолжить? Пожалуйста, это сводит меня с ума.
Спасибо заранее, Pixelle
Всего 3 ответа
Ваш файл состоит из кортежей-литералов, это не очень хорошо отформатированные данные csv.
ast.literal_eval
будет служить вам лучше, чем модуль csv
.
демонстрация
$ cat logsTESTII.csv
(ཋ', ཆ', ཇ', ཌྷ')
(ཎ', ཎ', ཌྷ', ཎ')
(', ཌྷ', ཌྷ', ཎ')
(ཊ', ', ཌྷ', ཊ')
(ཋ', ཇ', ཏ', ཌྷ')
$ python2.7
>>> from ast import literal_eval
>>> with open('logsTESTII.csv') as f:
... data = [literal_eval(line) for line in f]
...
>>> data
[(ཋ', ཆ', ཇ', ཌྷ'),
(ཎ', ཎ', ཌྷ', ཎ'),
(', ཌྷ', ཌྷ', ཎ'),
(ཊ', ', ཌྷ', ཊ'),
(ཋ', ཇ', ཏ', ཌྷ')]
Мне кажется, что вы неправильно поняли индекс CSV-файла. Строка в вашем файле выглядит так:
('15', '10', '11', '17');
Но я думаю, что строка должна выглядеть так, что может объяснить, что питон сделал странные вещи:
15, 10, 11, 17
Приветствую вас, Крис ван ден Хорн из CCD
delimiter
относится к разделителю для каждого поля , а не к каждой строке. Так что разделитель здесь ,
не ;
, with open('logsTESTII.csv') as f, open('out.csv', 'w') as of: for line in f: line = line.replace(";", "").replace(")", "").replace("(", "") of.write(line)