Необъяснимый начальный пробел только в первом значении при чтении из CSV - PullRequest
0 голосов
/ 12 ноября 2018

Я читаю некоторые значения из .csv, и по какой-то причине к началу первого значения добавляется пробел.Кто-нибудь знает, почему это может быть?

ВХОД:

enter image description here

    with open('input.csv') as csv_file:
    csv_reader = csv.reader(csv_file)
    for row in csv_reader:

        host = row[0]
        destination = row[1]
        port = row[2]
        print("HOST")
        print(host)

ВЫХОД:

enter image description here

Обратите внимание, что в файле input.csv нет пробелов в начале первого значения.Также использование lstrip (), похоже, не исправляет это.

Ответы [ 3 ]

0 голосов
/ 12 ноября 2018
 with open('input.csv') as csv_file:
    csv_reader = csv.reader(csv_file)
    for row in csv_reader:

        host = row[0]
        destination = row[1]
        port = row[2]
        print("HOST")
        print(host) #  Remove spaces by treating strings
        print(host.strip()) # Default is a blank character
0 голосов
/ 12 ноября 2018

Вероятно, это кодовая точка ZERO WIDTH NO-BREAK SPACE (U + FEFF), используемая в качестве метки порядка байтов (BOM) для файлов с кодировкой UTF16 и UTF32 и подписи для файлов с кодировкой UTF-8. Не удаляется .strip(). Использование open('input.csv',encoding='utf-8-sig') удаляет подпись, если она присутствует, при условии, что ваш .CSV закодирован в UTF-8. Другие варианты utf16 и utf32. Они требуют спецификации и также удаляют ее, но, скорее всего, это UTF-8.

Используйте print(ascii(host)), чтобы увидеть, какой персонаж на самом деле:

>>> host = '\ufeffBob'
>>> print(x)
 Bob
>>> print(ascii(x))
'\ufeffBob'
0 голосов
/ 12 ноября 2018

Попробуйте с

with open('input.csv') as csv_file:
csv_reader = csv.reader(csv_file)
for row in csv_reader:

    host = row[0]
    host = host.strip() #  choo off whitespace
    destination = row[1]
    port = row[2]
    print("HOST")
    print(host)

бок о бок Примечание:

csv_reader = csv.reader(csv_file, skipinitialspace=True)

skipinitialspace: если задано значение True, любые пробелы, следующие сразу за разделителем, игнорируются.

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