Python открывает текстовый файл с пробелом между каждым символом
Всякий раз, когда я пытаюсь открыть CSV файл с помощью команды python
fread = open('input.csv', 'r')
он всегда открывает файл пробелами между каждым символом. Я предполагаю, что что-то не так с текстовым файлом, потому что я могу открыть другие текстовые файлы с той же командой, и они загружены правильно. Кто-нибудь знает, почему текстовый файл будет загружаться как в python?
Спасибо.
Обновление
Хорошо, я получил его с помощью сообщения Jarret Hardie
это код, который я использовал для преобразования файла в 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)
Спасибо!
Ответы
Ответ 1
Пост рекурсивным, вероятно, прав... содержимое файла, скорее всего, кодируется многобайтовой кодировкой. Если это, на самом деле, случай, когда вы, скорее всего, прочитаете файл в самом python, без необходимости его сначала конвертировать за пределы python.
Попробуйте что-то вроде:
fread = open('input.csv', 'rb').read()
mytext = fread.decode('utf-16')
Флаг 'b' гарантирует, что файл будет считаться двоичными данными. Вам нужно знать (или догадываться) исходную кодировку... в этом примере я использовал utf-16, но YMMV. Это преобразует файл в unicode. Если у вас действительно есть файл с многобайтовыми символами, я не рекомендую преобразовывать его в ascii, так как вы можете потерять много символов в этом процессе.
EDIT: Спасибо за загрузку файла. Есть два байта в передней части файла, что указывает на то, что он действительно использует широкую кодировку. Если вам интересно, откройте файл в шестнадцатеричном редакторе, как предложили некоторые... вы увидите что-то в текстовой версии, например "I.D. |". (и т.д). Точка - дополнительный байт для каждого char.
Фрагмент кода выше, похоже, работает на моей машине с этим файлом.
Ответ 2
Файл закодирован в некотором кодировке unicode, но вы читаете его как ascii. Попробуйте преобразовать файл в ascii, прежде чем использовать его в python.
Ответ 3
Не является csv простым файлом txt со значениями, разделенными запятой.
Просто попробуйте открыть его с помощью текстового редактора, чтобы убедиться, что файл правильно сформирован.
Ответ 4
Чтобы прочитать закодированный файл, вы можете просто заменить open
на codecs.open
.
fread = codecs.open('input.csv', 'r', 'utf-16')
Ответ 5
Это никогда не возникало для меня, но, как сказал truppo, это должно быть что-то не так с файлом.
Попробуйте открыть файл в Excel/BrOffice Calc и сохранить как файл снова как Csv.
Если проблема не устранена, попробуйте подмножество данных: fist 10/last 10/intermediate 10 строк файла.
Ответ 6
Вы также можете загрузить этот файл на сайт, например http://drop.io/ и предоставить нам ссылку.
Ответ 7
Хорошо, я получил его с помощью сообщения Jarret Hardie
это код, который я использовал для преобразования файла в 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)
Спасибо!
Ответ 8
Откройте файл в двоичном режиме, 'rb'. Проверьте его в редакторе HEX и отметьте нулевой пробел "00". Откройте файл в виде текстового редактора Scintilla, чтобы проверить символы, присутствующие в файле.
Ответ 9
Здесь быстрый и простой способ, esp, если python не будет правильно анализировать вход
sed 's/ \(.\)/\1/g'