Проблема обработки данных файла .csv в Python - PullRequest
0 голосов
/ 24 октября 2018

Я работаю с Python 2.7 под Ubuntu 18.04 и обрабатываю некоторые данные из файла .csv.Чтобы передать их в мой сценарий, мне нужно иметь их в списке в определенном формате.Вот как это должно выглядеть:

data = [('15', '10', '11', '17'),
        ('18', '18', '17', '18'),
        ('12', '17', '17', '18'),
        ('14', '12', '17', '14'),
        ('15', '11', '19', '17')]

каждое «значение», содержащееся в файле .csv, представляет собой серию чисел, окруженных () подобным этому »('15', '10', '11',' 17 ') ".

мой файл .csv выглядит так:

('15', '10', '11', '17');
('18', '18', '17', '18');
('12', '17', '17', '18');
('14', '12', '17', '14');
('15', '11', '19', '17')

и скрипт, читающий файл 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, я всегда получаю странные результаты, подобные этому:

[[["('18', '18', '17', '18')", ''], ["('12', '17', '17', '18')", ''], ["('14', '12', '17', '14')", ''], ["('15', '11', '19', '17')"], [], []]]

Мне просто нужен список со всеми моими данными, один последругие разделены запятой.

Как я могу продолжить?Пожалуйста, это сводит меня с ума.

Заранее спасибо, Пиксель

Ответы [ 3 ]

0 голосов
/ 24 октября 2018

Ваш файл состоит из кортежей-литералов, это не очень хорошо отформатированные данные CSV.
ast.literal_eval будет служить вам лучше, чем csv модуль здесь.

Демо

$ cat logsTESTII.csv 
('15', '10', '11', '17')
('18', '18', '17', '18')
('12', '17', '17', '18')
('14', '12', '17', '14')
('15', '11', '19', '17')
$ python2.7
>>> from ast import literal_eval
>>> with open('logsTESTII.csv') as f:
...     data = [literal_eval(line) for line in f]
... 
>>> data
[('15', '10', '11', '17'),
 ('18', '18', '17', '18'),
 ('12', '17', '17', '18'),
 ('14', '12', '17', '14'),
 ('15', '11', '19', '17')]
0 голосов
/ 24 октября 2018
  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)

0 голосов
/ 24 октября 2018

Мне кажется, вы неправильно поняли индекс файла .csv.Строка в вашем файле выглядит следующим образом:

('15', '10', '11', '17');

Но я думаю, что строкадолжно выглядеть так, что могло бы объяснить, что python делал странные вещи:

15, 10, 11, 17

С уважением, Крис Фаул.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...