Python CSV Parse Символ "§" - PullRequest
       2

Python CSV Parse Символ "§"

1 голос
/ 15 апреля 2019

Я пытаюсь проанализировать файл .csv, содержащий символ § в python, например:

Name;Paragraph
Spam;§15

И следующий код:

import csv
pathAndFileName = r"D:\Spam\test.csv"
with open(pathAndFileName, newline='') as csvFile:
    reader = csv.DictReader(csvFile, delimiter=';', quotechar='"')
    csvObject= []
    for row in reader:
        csvObject.append(row)
    print(csvObject)

Однако по какой-то причине он анализируется так:

[OrderedDict([('Name', 'Spam'), ('Paragraph', '§15')])]

Итак, очевидно, что символ § анализируется как §.

Есть ли причина, по которой это происходит? И как я могу обойти это?

Ответы [ 2 ]

2 голосов
/ 15 апреля 2019

Итак, по-видимому, происходит то, что символ § анализируется как §

Ну, более или менее, но это в любом случае не связано с анализом CSV. Это просто вызвано несовместимой кодировкой.

'§' - это символ Unicode U + 00A7. Он кодируется как b'\xa7' в Latin1 или Windows CP1252, и как b'\xc2\xa7' в UTF-8.

И b'\xc2\xa7'.decode('latin1') просто дает ... '§'.

Что может произойти:

  1. файл имеет кодировку utf-8, и вы читаете его как latin1. Просто объявите кодировку:

    with open(pathAndFileName, encoding='utf8', newline='') as csvFile:
    
  2. ваша среда Python выводит данные Unicode как UTF-8, в то время как терминал обрабатывает их как Latin1. Убедитесь, что Python и терминал используют одинаковую кодировку. Прошу прощения, что не буду подробно останавливаться, но это действительно зависит от слишком многих вещей, ОС, терминала, переменных среды и т. Д.

2 голосов
/ 15 апреля 2019

Использование encoding='utf-8'

example2.csv:

Name;Paragraph
Spam;§15

Следовательно :

import csv
pathAndFileName = r"example2.csv"
with open(pathAndFileName, newline='', encoding='utf-8') as csvFile:
    reader = csv.DictReader(csvFile, delimiter=';', quotechar='"')
    csvObject= []
    for row in reader:
        csvObject.append(row)
    print(csvObject)

ВЫХОД :

[OrderedDict([('Name', 'Spam'), ('Paragraph', '§15')])]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...