Преобразование файла CSV в другую форму - PullRequest
0 голосов
/ 11 октября 2018

У меня есть файл CSV с содержимым

01 "815732013.0" 1brand1 "[100 76 64 ... 153 139 94]"

01 "815732025.0" 1female1 "[183 192 201 ... 18 10 0] "

01" 815732027.0 "1male1" [204 214 221 ... 214 221 255] "

в одном столбце

Мне нужно содержимое в четырех столбцах, как это,

col1    col2             col3       col4
01     "815732013.0"    1brand1     "[100  76  64 ... 153 139  94]"
01     "815732025.0"    1female1    "[183 192 201 ...  18  10   0]"
01     "815732027.0"    1male1      "[204 214 221 ... 214 221 255]"

Как я могу это изменить?используя python / excel / любые другие инструменты.

1 Ответ

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

Если вам не нужно иметь двойные кавычки в выходном файле, тогда вы должны разбить строки на двойные кавычки:

import csv
import io


text = '''01"815732013.0"1brand1"[100 76 64 ... 153 139 94]"
01"815732025.0"1female1"[183 192 201 ... 18 10 0]"
01"815732027.0"1male1"[204 214 221 ... 214 221 255]"'''


with io.StringIO(text) as f, open('output.csv', 'w') as of:
    writer = csv.writer(of, delimiter=',', quotechar='"')
    for line in f:
        line = [r for r in line.strip().split('"') if r]
        writer.writerow(line)

Этот фрагмент кода довольно хорошпростой.Вы в основном разбиваете на двойные кавычки и отбрасываете пустые строки.

Если вы хотите, чтобы ваш выходной файл содержал кавычки, то вам, возможно, придется использовать некоторое регулярное выражение для захвата полей:

import csv
import io
import re


text = '''01"815732013.0"1brand1"[100 76 64 ... 153 139 94]"
01"815732025.0"1female1"[183 192 201 ... 18 10 0]"
01"815732027.0"1male1"[204 214 221 ... 214 221 255]"'''


with io.StringIO(text) as f, open('output.csv', 'w') as of:
    pat = re.compile(r'(\d+)(\b".+"\b)(\w+)(\b".+"\b)')
    writer = csv.writer(of, delimiter=',', quotechar='"')
    for line in f:
        line = pat.sub(r'\1;\2;\3;\4', line.strip()).split(';')
        writer.writerow(line)

Это очень похоже на предыдущий фрагмент с единственным отличием в регулярном выражении.Выражение группирует различные поля в соответствии с желаемым результатом.Эти группы используются для генерации набора значений строк, которые передаются методу writer.writerow для записи строки в целевой файл.

Надеюсь, это окажется полезным.

...