Подтвердить что ты не робот

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)

Спасибо!

4b9b3361

Ответ 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'