Анализ CSV в Python: проблемы с извлечением полного текста из столбца ⇐ Python
-
Anonymous
Анализ CSV в Python: проблемы с извлечением полного текста из столбца
Я работаю над созданием функции get_data() в Python, которая не принимает никаких аргументов. Его цель — загрузить файл с именем tx_deathrow_full.csv и вернуть список словарей. Каждый словарь должен иметь 18 полей, соответствующих строке набора данных.
Обновленную версию набора данных можно найти по адресу:
https://www.tdcj.texas.gov/death_row/dr ... nders.html
Моя попытка:
Я написал фрагмент кода, который почти выполняет эту задачу:
def get_data(): deathrow_data = [] с open('tx_deathrow_full.csv', 'r') в качестве файла: # Пропускает первые две строки (из-за того, как задается csv-файл) следующий(фил) следующий(фил) читатель = csv.reader(фил) для подсчета, строка в перечислении (читатель): if count < 5: # Выборка из 5 строк row_data = строка[0].split(',') row_dict = { «Выполнение»: int(row_data[0]), «Дата рождения»: row_data[1], «Дата правонарушения»: row_data[2], «Высший уровень образования»: int(row_data[3]), «Фамилия»: row_data[4], «Имя»: row_data[5], «Номер TDCJ»: int(row_data[6]), «Возраст при исполнении»: int(row_data[7]), «Дата получения»: row_data[8], «Дата исполнения»: row_data[9], «Раса»: row_data[10], «Округ»: row_data[11], «Цвет глаз»: row_data[12], «Вес»: int(row_data[13]), «Высота»: row_data[14], «Родной округ»: row_data[15], «Исходное состояние»: row_data[16], 'Последнее выражение': row_data[17].rstrip(';') # Чтобы удалить ';' в конце Последнего заявления. } deathrow_data.append(row_dict) еще: перерыв вернуть данные Deathrow_data Однако проблема возникает с полем «Последнее заявление». Он захватывает текст только до первой запятой и обрезает остальной текст или не включает весь текст.
Пример:
В файле CSV строка 6 гласит:
550,1987-04-04,2008-04-06,11,Давила,Эрик Дэниел,999545,31,2009-02-27,2018-04-25,Черный,Таррант,Коричневый,161 ,"5' 11""",Таррант, Техас,"Да, я хотел бы сказать, племянник, это горит, хах. Ты знаешь, я, возможно, проиграл бой, но я все еще солдат. Я все еще люблю вас всех. Сторонники и семья, вы все держитесь. Десять пальцев вниз, вправо. Вот и все». Но мой код возвращает:
550,1987-04-04,2008-04-06,11,Давила,Эрик Дэниел,999545,31,2009-02-27,2018-04-25,Черный,Таррант,Коричневый,161 ,"5' 11""",Таррант, Техас,"Да, я хотел бы сказать, племянник, это горит, хах. Ты знаешь, я, возможно, проиграл бой, но я все еще солдат. Я все еще люблю вас всех. Сторонники и семья, вы все держитесь. Десять пальцев вниз, вправо. Вот и все». Но когда я запускаю свой код, он возвращает только следующий результат:
[... , {'Казнь': 550, 'Дата рождения': '1987-04-04', 'Дата правонарушения': '2008-04-06', 'Высший уровень образования': 11, 'Фамилия': ' Давила», «Имя»: «Эрик Дэниел», «Номер TDCJ»: 999545, «Возраст на момент казни»: 31, «Дата получения»: «27 февраля 2009 г.», «Дата казни»: «04 2018 г.» -25', 'Раса': 'Черный', 'Графство': 'Таррант', 'Цвет глаз': 'Карий', 'Вес': 161, 'Рост': '"5\' 11"""', «Родной округ»: «Таррант», «Родной штат»: «Техас», «Последнее заявление»: «Да»}, ...] Обратите внимание, что слово «Последнее заявление» ошибочно сокращено до «Да» вместо полного текста.
Это CSV-файл перед загрузкой.
Это CSV-файл, который я загрузил и открыл в Excel.
Примечание: Обратите внимание, что в обоих фрагментах показан пример
Вопрос:
Как я могу изменить свой код, чтобы обеспечить захват и включение полного текста «Последнего утверждения» в словарь с учетом структуры файла CSV?
Что я пробовал:
Я пытался использовать библиотеку Pandas для решения этой проблемы, но безуспешно, поскольку не знаком с ее функциями.
Кроме того, ранее я экспериментировал со следующим фрагментом кода, но позже изменил его до версии, которой поделился ранее, поскольку он показался мне более близким к желаемому результату.
def get_data(): """ Возвращающийся deathrow_data опдатерт! """ deathrow_data = [] # Список всех объектов с open('tx_deathrow_full.csv', 'r') в качестве файла: fieldnames1 = ['Исполнение', 'Дата рождения', 'Дата совершения правонарушения', 'Высший уровень образования', 'Фамилия', «Имя», «TDCJ\nНомер», «Возраст при исполнении», «Дата получения», «Дата казни», «Раса», «Округ», «Цвет глаз», «Вес», «Рост», «Родной округ», «Родной штат», «Последнее заявление»] читатель = csv.DictReader(fil, fieldnames=fieldnames1, delimiter=';') next(reader) # Springer forste linje over (заголовок) next(reader) # Springer anden linje over количество = 0 для строки в ридере: if count < 4: # Очистите образец на 3-х строках deathrow_data.append(строка) считать += 1 еще: перерыв вернуть данные Deathrow_data результат = get_data() печать (результат) Не обращайте внимания на датские комментарии в коде.
Я работаю над созданием функции get_data() в Python, которая не принимает никаких аргументов. Его цель — загрузить файл с именем tx_deathrow_full.csv и вернуть список словарей. Каждый словарь должен иметь 18 полей, соответствующих строке набора данных.
Обновленную версию набора данных можно найти по адресу:
https://www.tdcj.texas.gov/death_row/dr ... nders.html
Моя попытка:
Я написал фрагмент кода, который почти выполняет эту задачу:
def get_data(): deathrow_data = [] с open('tx_deathrow_full.csv', 'r') в качестве файла: # Пропускает первые две строки (из-за того, как задается csv-файл) следующий(фил) следующий(фил) читатель = csv.reader(фил) для подсчета, строка в перечислении (читатель): if count < 5: # Выборка из 5 строк row_data = строка[0].split(',') row_dict = { «Выполнение»: int(row_data[0]), «Дата рождения»: row_data[1], «Дата правонарушения»: row_data[2], «Высший уровень образования»: int(row_data[3]), «Фамилия»: row_data[4], «Имя»: row_data[5], «Номер TDCJ»: int(row_data[6]), «Возраст при исполнении»: int(row_data[7]), «Дата получения»: row_data[8], «Дата исполнения»: row_data[9], «Раса»: row_data[10], «Округ»: row_data[11], «Цвет глаз»: row_data[12], «Вес»: int(row_data[13]), «Высота»: row_data[14], «Родной округ»: row_data[15], «Исходное состояние»: row_data[16], 'Последнее выражение': row_data[17].rstrip(';') # Чтобы удалить ';' в конце Последнего заявления. } deathrow_data.append(row_dict) еще: перерыв вернуть данные Deathrow_data Однако проблема возникает с полем «Последнее заявление». Он захватывает текст только до первой запятой и обрезает остальной текст или не включает весь текст.
Пример:
В файле CSV строка 6 гласит:
550,1987-04-04,2008-04-06,11,Давила,Эрик Дэниел,999545,31,2009-02-27,2018-04-25,Черный,Таррант,Коричневый,161 ,"5' 11""",Таррант, Техас,"Да, я хотел бы сказать, племянник, это горит, хах. Ты знаешь, я, возможно, проиграл бой, но я все еще солдат. Я все еще люблю вас всех. Сторонники и семья, вы все держитесь. Десять пальцев вниз, вправо. Вот и все». Но мой код возвращает:
550,1987-04-04,2008-04-06,11,Давила,Эрик Дэниел,999545,31,2009-02-27,2018-04-25,Черный,Таррант,Коричневый,161 ,"5' 11""",Таррант, Техас,"Да, я хотел бы сказать, племянник, это горит, хах. Ты знаешь, я, возможно, проиграл бой, но я все еще солдат. Я все еще люблю вас всех. Сторонники и семья, вы все держитесь. Десять пальцев вниз, вправо. Вот и все». Но когда я запускаю свой код, он возвращает только следующий результат:
[... , {'Казнь': 550, 'Дата рождения': '1987-04-04', 'Дата правонарушения': '2008-04-06', 'Высший уровень образования': 11, 'Фамилия': ' Давила», «Имя»: «Эрик Дэниел», «Номер TDCJ»: 999545, «Возраст на момент казни»: 31, «Дата получения»: «27 февраля 2009 г.», «Дата казни»: «04 2018 г.» -25', 'Раса': 'Черный', 'Графство': 'Таррант', 'Цвет глаз': 'Карий', 'Вес': 161, 'Рост': '"5\' 11"""', «Родной округ»: «Таррант», «Родной штат»: «Техас», «Последнее заявление»: «Да»}, ...] Обратите внимание, что слово «Последнее заявление» ошибочно сокращено до «Да» вместо полного текста.
Это CSV-файл перед загрузкой.
Это CSV-файл, который я загрузил и открыл в Excel.
Примечание: Обратите внимание, что в обоих фрагментах показан пример
Вопрос:
Как я могу изменить свой код, чтобы обеспечить захват и включение полного текста «Последнего утверждения» в словарь с учетом структуры файла CSV?
Что я пробовал:
Я пытался использовать библиотеку Pandas для решения этой проблемы, но безуспешно, поскольку не знаком с ее функциями.
Кроме того, ранее я экспериментировал со следующим фрагментом кода, но позже изменил его до версии, которой поделился ранее, поскольку он показался мне более близким к желаемому результату.
def get_data(): """ Возвращающийся deathrow_data опдатерт! """ deathrow_data = [] # Список всех объектов с open('tx_deathrow_full.csv', 'r') в качестве файла: fieldnames1 = ['Исполнение', 'Дата рождения', 'Дата совершения правонарушения', 'Высший уровень образования', 'Фамилия', «Имя», «TDCJ\nНомер», «Возраст при исполнении», «Дата получения», «Дата казни», «Раса», «Округ», «Цвет глаз», «Вес», «Рост», «Родной округ», «Родной штат», «Последнее заявление»] читатель = csv.DictReader(fil, fieldnames=fieldnames1, delimiter=';') next(reader) # Springer forste linje over (заголовок) next(reader) # Springer anden linje over количество = 0 для строки в ридере: if count < 4: # Очистите образец на 3-х строках deathrow_data.append(строка) считать += 1 еще: перерыв вернуть данные Deathrow_data результат = get_data() печать (результат) Не обращайте внимания на датские комментарии в коде.