Проблема обработки .csv-файлов в Python

Я работаю с 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


  1. Параметр delimiter относится к разделителю для каждого поля , а не к каждой строке. Так что разделитель здесь , не ; ,
  2. Ваш файл не является хорошо отформатированным csv, поэтому, если бы я знал структуру файла и должен был создать csv, я бы это сделал:

with open('logsTESTII.csv') as f, open('out.csv', 'w') as of: for line in f: line = line.replace(";", "").replace(")", "").replace("(", "") of.write(line)


Есть идеи?

10000