Проблема чтения файла CSV в Python, когда в элементе находится сам символ-разделитель - PullRequest
0 голосов
/ 10 октября 2018

Я пытаюсь прочитать текстовый файл (запятую) в CSV с помощью csv.reader ().Но из-за того, что мой разделитель (,) иногда находится внутри объекта / элемента, вся строка считываемых элементов смещается.

Пример:

input.txt:

Stevenson Corp, 123 Main St, 3 employees\n
Johnson Inc, 456 Main St, 5 employees\n

приведет к столбцу CSV в виде:

Stevenson Corp | 123 Main St | 3 employees
Jonson Inc | 456 Main St | 5 employees

Однако проблема возникает, если яу моего файла input.txt есть (,) внутри разделенных элементов, например:

input_bad.txt:

Stevenson Corp, 123 Main St, 3 employees\n
Johnson, Inc, 456 Main St, 5 employees\n #notice the comma before Inc

приведет к неправильному CSV, столбцу которого будет:

Stevenson Corp | 123 Main St | 3 employees #3 columns 
Jonson | Inc | 456 Main St | 5 employees #4 columns (issue)

Я не могу придумать никакого решения, чтобы Jonson, Inc вместе не разделялись разделителем ",".

Мой код открывает txt-файл и csv следующим образом:

inputfile = open(os.path.join(somelocation, somefile.txt), "r", encoding="utf-8", errors="replace")

csv_data = csv.reader(inputfile, delimiter = ",")

Пожалуйста, помогите.

1 Ответ

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

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

import csv
with open(os.path.join(somelocation, somefile.txt), "r", encoding="utf-8", errors="replace") as inputfile:
    spamreader = csv.reader(inputfile, delimiter='¬')
    for row in spamreader:
        new_row = row.rsplit(",", 2)
        print("|".join(new_row))

При этом используется разделитель, которого нет в вашем тексте, поэтому он не разделяет строки (так что вместо этого вы можете читать inputfile.readlines()), затем он использует rsplit, чтобы разделить две самые правые запятые для создания столбцов

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