Чтение csv из папки FTP - PullRequest
       1

Чтение csv из папки FTP

0 голосов
/ 07 июня 2018

Я пытаюсь прочитать CSV-файл из папки FTP

ftp = FTP('adr')  
ftp.login(user='xxxx', passwd = 'xxxxx')
r = StringIO()
ftp.retrbinary('RETR /DataLoadFolder/xxx/xxx/xxx/'+str(file_name),r.write)
r.seek(0)
csvfile1 = csv.reader(r,delimiter=';')
input_file = [list(line) for line in csv.reader(r)] ----- Error

получаю сообщение об ошибке в последней строке как

new-line character seen in unquoted field - do you need to open the file in universal-newline mode?

Мой CSV-файл

enter image description here

Текстовая версия
enter image description here

В конце каждой строки есть пробелы (после 17.00)

Данные начинаются со второй строки

Что означает ошибка?Любая помощь будет высоко ценится.

Ответы [ 2 ]

0 голосов
/ 12 июня 2018

Я мог частично воспроизвести и исправить.Ошибка вызвана строкой, содержащей bad конец строки.Я мог бы воспроизвести, добавив строку \r \n в конец другого действительного файла CSV.

Простой способ исправить это - использовать фильтр для удаления пустых строк и очистки конца строк:

def filter_bytes(fd):
    for line in fd:
        line = line.strip()
        if len(line) != 0:
            yield(line + b'\r\n')

Как только это будет сделано, ваш код может стать:

ftp = FTP('adr')  
ftp.login(user='xxxx', passwd = 'xxxxx')
r = BytesIO()
ftp.retrbinary('RETR /DataLoadFolder/xxx/xxx/xxx/'+str(file_name),r.write)
r.seek(0)
csvfile1 = csv.reader(filter_bytes(r),delimiter=';')
input_file = list(csvfile1)
0 голосов
/ 07 июня 2018

Сообщение об ошибке, просто спрашивающее, как бы вы хотели обработать символ новой строки по-разному по историческим причинам, вы можете прочитать в объяснении здесь .

Для решения проблемы укажите newline на StringIO, например:

r = StringIO(newline='')

В соответствии с документацией StringIO .Если для новой строки установлено значение Нет, новые строки записываются как \n на всех платформах, но универсальное декодирование новой строки все еще выполняется при чтении.

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