python открывает текстовый файл с пробелом между каждым символом

всякий раз, когда я пытаюсь открыть .csv-файл с командой python fread = open('input.csv', 'r') он всегда открывает файл с пробелами между каждым символом. Я предполагаю, что это что-то не так с текстовым файлом, потому что я могу открыть другие текстовые файлы с той же командой, и они загружаются правильно. Кто-нибудь знает, почему текстовый файл будет загружаться так в python?

спасибо.

обновление

хорошо, я получил его с помощью Джаррета Харди пост

это код, который я использовал для преобразования файла в ascii

fread = open('input.csv', 'rb').read()
mytext = fread.decode('utf-16')
mytext = mytext.encode('ascii', 'ignore')
fwrite = open('input-ascii.csv', 'wb')
fwrite.write(mytext)

спасибо!

9 ответов


сообщение рекурсивным, вероятно, правильно... содержимое файла, вероятно, закодировано с помощью многобайтовой кодировки. Если это действительно так, вы можете прочитать файл в python, не конвертируя его сначала за пределами python.

попробуйте что-то вроде:

fread = open('input.csv', 'rb').read()
mytext = fread.decode('utf-16')

флаг " b " гарантирует, что файл считывается как двоичные данные. Вам нужно знать (или угадать) исходную кодировку... в этом примере я использовал utf-16, но YMMV. Это преобразует файл в Юникод. Если у вас действительно есть файл с многобайтовыми символами, я не рекомендую преобразовывать его в ascii, поскольку вы можете потерять много символов в процессе.

EDIT: Спасибо за загрузку файла. В передней части файла есть два байта, что указывает на то, что он действительно использует широкую кодировку. Если вам интересно, откройте файл в hex редакторе, как некоторые предположили... вы увидите что-то в текстовой версии, как И. Д.|.' (п.) Точка-это дополнительный байт для каждый шар.

фрагмент кода выше, кажется, работает на моей машине с этим файлом.


файл закодирован в некоторой кодировке unicode, но Вы читаете его как ascii. Попробуйте преобразовать файл в ascii перед его использованием в python.


не является csv простым txt-файлом со значениями, разделенными запятыми. Просто попробуйте открыть его с помощью текстового редактора, чтобы увидеть, правильно ли сформирован файл.


чтобы прочитать зашифрованный файл, вы можете просто заменить open С codecs.open.

fread = codecs.open('input.csv', 'r', 'utf-16')

Мне это никогда не приходило в голову, но, как сказал труппо, это должно быть что-то не так с файлом.

попробуйте открыть файл в Excel / BrOffice Calc и сохранить как файл как Csv снова.

Если проблема не устранена, попробуйте подмножество данных: fist 10/last 10/intermediate 10 строк файла.


вы можете также загрузить файл в вопросе на сайт, какhttp://drop.io/ и дайте нам ссылку.


хорошо, я получил его с помощью сообщения Джаррета Харди

это код, который я использовал для преобразования файла в ascii

fread = open('input.csv', 'rb').read()
mytext = fread.decode('utf-16')
mytext = mytext.encode('ascii', 'ignore')
fwrite = open('input-ascii.csv', 'wb')
fwrite.write(mytext)

спасибо!


откройте файл в двоичном режиме, 'rb'. Проверьте его в шестнадцатеричном редакторе и проверьте наличие нулевого заполнения "00". Откройте файл в чем-то вроде текстового редактора Scintilla, чтобы проверить символы, присутствующие в файле.


вот быстрый и простой способ, esp, если python не будет правильно анализировать входные данные

sed 's/ \(.\)//g'