Разбор плохого CSV - PullRequest
       7

Разбор плохого CSV

1 голос
/ 19 июля 2011

У меня есть "плохой" файл, разделенный табуляцией, который мне нужно очистить. Проблема заключается в том, что поля могут иметь разрывы строк. Я думаю, что самый простой способ исправить это - заменить «неправильные» переносы строк каким-нибудь заменяющим символом, скажем пробелом. Теперь я могу представить, как это сделать, если в строке должно быть n полей (псевдокод)

var line = read n-1 fields ending in a tab, and then until the end of line
line.replace("\n", " ")
line.replace("\r", " ")
write line to output

Теперь эти файлы огромны, и их нельзя стравить. Это разумный подход? (Я знаю, что это будет путаница из-за разрывов строк в последнем поле, но я хочу жить с этим) Что было бы хорошим способом прочитать достаточно данных? Меня не волнует, на каком языке это написано, но я предпочитаю .net, perl или python2, так как у меня есть время выполнения для доступных.

Ответы [ 3 ]

1 голос
/ 19 июля 2011

Решение Python:

csv_filename = 'foo.csv'
new_csv_filename = 'foo.fixed.csv'
num_fields = 10

with open(csv_filename, 'rU') as reader and open(new_csv_filename, 'w') as writer:
    while True:
        line = ''
        while len(line.split('\t')) < num_fields:
            line += reader.readline().replace('\n', ' ')
        writer.write(line + '\n')  # Or '\r\n' if you prefer

Я бы не стал выполнять автоматическую замену файлов;убедитесь, что вы сохранили оригинал.

1 голос
/ 19 июля 2011

Вы можете сделать это в очень быстром скрипте awk:

awk -F\t '{while(NF < (numberoffields) { line=$0; getline; $0 = line $0;} print}' 
0 голосов
/ 19 июля 2011

Я не уверен, что это правильный форум, чтобы задавать этот вопрос, но вам нужна программа текстового редактора, например TextWrangler (для Mac OSX). Это может обрабатывать большие наборы данных и выполнять довольно сложный поиск и замену.

Наверное, должна быть программа, эквивалентная ПК.

CSV-файлы в основном являются текстовыми файлами в конце дня, так что это то, что вам нужно, чтобы избавиться от осла.

...