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

StackOverflow https://stackoverflow.com/questions/603115

  •  03-07-2019
  •  | 
  •  

Вопрос

Всякий раз, когда я пытаюсь открыть 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)

Спасибо!

Это было полезно?

Решение

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

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

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

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

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

Приведенный выше фрагмент кода, похоже, работает на моем компьютере с этим файлом.

Другие советы

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

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

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

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

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

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

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

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

это код, который я использовал для преобразования файла в 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, чтобы проверить символы, присутствующие в файле.

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

sed 's/ \(.\)/\1/g'
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top