Игнорирование запятых в строковых литералах при чтении в файле .csv без использования внешних библиотек - PullRequest
0 голосов
/ 16 февраля 2020

Я пытаюсь прочитать файл .csv, строка которого выглядит примерно так:

"Red","Apple, Tomato".

Я хочу прочитать эту строку в словаре, используя «Red» в качестве ключа и «Apple, Tomato» в качестве определения. Я также хочу сделать это без использования каких-либо библиотек или модулей, которые необходимо импортировать.

Проблема, с которой я сталкиваюсь, заключается в том, что она пытается разбить эту строку на 3 отдельных фрагмента, потому что между ними "Apple" стоит запятая "и" Помидор ", на который разделен код. Это то, что у меня есть сейчас:

file_folder = sys.argv[1]
file_path = open(file_folder+ "/food_colors.csv", "r")

food_dict = {}
for line in file_path:
    (color, description) = line.rstrip().split(',')
    print(f"{color}, {description}")

Но это дает мне ошибку, потому что у него есть 3 фрагмента данных, но я даю только 2 переменные для хранения информации. Как я могу сделать это игнорировать запятую внутри строкового литерала?

Ответы [ 2 ]

1 голос
/ 16 февраля 2020

Вы можете собрать оставшиеся строки в список, например:

color, *description = line.rstrip().split(',')

Затем вы можете объединить строки описания обратно, чтобы получить значение для вашего dict

Другой способ

color, description = line.rstrip().split(',', 1)

Будет означать, что вы выполняете операцию разбиения только один раз, а остальная часть строки остается неразделенной.

0 голосов
/ 16 февраля 2020

Вы можете использовать pandas пакет и использовать pandas.DataFrame.read_csv.

Например, это работает:

from io import StringIO
import pandas as pd

TESTDATA = StringIO('"Red","Apple, Tomato"')

df = pd.read_csv(TESTDATA, sep=",", header=None)

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