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'