Nano Hash - криптовалюты, майнинг, программирование

Как прочитать содержимое файла из файла?

Используя Python3, вы надеетесь os.walk каталог файлов, считывать их в двоичный объект (строку?) И производить с ними некоторую дальнейшую обработку. Однако первый шаг: как читать результаты файла (ов) os.walk?

# NOTE: Execute with python3.2.2

import os
import sys

path = "/home/user/my-files"

count = 0
successcount = 0
errorcount = 0
i = 0

#for directory in dirs
for (root, dirs, files) in os.walk(path):
 # print (path)
 print (dirs)
 #print (files)

 for file in files:

   base, ext = os.path.splitext(file)
   fullpath = os.path.join(root, file)

   # Read the file into binary? --------
   input = open(fullpath, "r")
   content = input.read()
   length = len(content)
   count += 1
   print ("    file: ---->",base," / ",ext," [count:",count,"]",  "[length:",length,"]")
   print ("fullpath: ---->",fullpath)

ОШИБКА:

Traceback (most recent call last):
  File "myFileReader.py", line 41, in <module>
    content = input.read()
  File "/usr/lib/python3.2/codecs.py", line 300, in decode
    (result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf8' codec can't decode byte 0xe2 in position 11: invalid continuation byte

Ответы:


1

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

input = open(fullpath, "r")

to

input = open(fullpath, "rb")

Результатом read () будет объект bytes ().

29.12.2011
  • Спасибо, Леннарт - Да, это был секретный соус, который мне был нужен. Вроде новичок в Python3! 29.12.2011
  • На самом деле это не Python 3. Двоичные файлы также должны открываться с флагом 'b' в Python 2. 30.12.2011
  • Да, оглядываясь назад, мне все это кажется глупым, но именно так мы, идиоты, учимся! Вы, наверное, думаете: RTFM! Еще раз спасибо за помощь. 04.11.2014

  • 2

    Поскольку некоторые из ваших файлов являются двоичными, они не могут быть успешно декодированы в символы Unicode, которые Python 3 использует для хранения всех строк в интерпретаторе. Обратите внимание, что большое изменение между Python 2 и Python 3 связано с переносом представления строк в символы Unicode из ASCII, что означает, что каждый символ не может рассматриваться просто как байт (да, текстовые строки в Python 3 требуют либо 2x, либо 4x как много памяти для хранения как Python 2, поскольку UTF-8 использует до 4 байтов на символ).

    Таким образом, у вас есть несколько вариантов, которые будут зависеть от вашего проекта:

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

    Независимо от вашего решения, важно отметить, что если в файлах вашей системы имеется широкий диапазон различных кодировок символов, вам нужно будет указать кодировку, поскольку Python 3.0 будет предполагать, что символы закодированы в UTF-8.

    В качестве справки - отличная презентация по вводу-выводу Python 3: http://www.dabeaz.com/python3io/MasteringIO.pdf

    29.12.2011
  • Спасибо за эту ссылку и за ваши комментарии - они мне очень пригодятся в процессе обучения. Пока, по крайней мере, все файлы кажутся легко читаемыми как двоичные. 29.12.2011
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..