Jun
Фев. 14, 2021 20:29:40
Здравствуйте, я еще совсем начинающий, подскажите, пожалуйста, не могу найти решение.
Мне необходимо открыть обычный файл txt в двоичном виде 1010, в поисковиках утверждают текстовый файл невозможно сразу открыть в двоичном виде. Для этого я использую функцию open и параметры.
Первый вариант
i = open (“text.txt”, “rb”)
print(i)
получаю ответ
<_io.BufferedReader name='text.txt'>
Process finished with exit code 0
Второй вариант
i = open(“text.txt”, “rb”, “buffering=30”)
print(i)
Получаю ответ
Traceback (most recent call last):
File “C:\Users\Username\PycharmProjects\pythonProject\test.py”, line 1, in <module>
i = open(“text.txt”, “rb”, “buffering=30”)
TypeError: an integer is required (got type str)
Process finished with exit code 1
doza_and
Фев. 14, 2021 21:21:18
Jun
не могу найти решение.
Почему не можете найти? Вы его нашли в первом случае. Все отлично, так и должно быть.
Может вы хотите его прочитать а не открыть?
После того как вы файл открыли, можно делать разные вещи, читать писать перемещаться в разные места файла. Поэтому открыть и прочитать это не одно и тоже.
Jun
Фев. 15, 2021 09:12:12
Да, действительно прочитать, спасибо, что поправили, я не правильно выразился, а как можно этот набор байт вывести через print() ?
Rodegast
Фев. 15, 2021 10:19:05
> Мне необходимо открыть обычный файл txt в двоичном виде 1010
Может тебе текст в биты преобразовать надо? Это как то так делается
>>> txt = "привет"
>>> list(map(bin,map(ord, txt)))
['0b10000111111', '0b10001000000', '0b10000111000', '0b10000110010', '0b10000110101', '0b10001000010']
Jun
Фев. 15, 2021 10:34:12
Rodegast
Может тебе текст в биты преобразовать надо?
Нет, не текст в биты то есть не содержимое файла, а сам файл преобразовать в биты.
rumactep
Фев. 15, 2021 10:47:31
Получше объясните что, вы хотите, чтобы далекий от вашей задачи человек сразу понял.
МОжет, как в картинке?
FishHook
Фев. 15, 2021 11:05:54
Jun
Нет, не текст в биты то есть не содержимое файла, а сам файл преобразовать в биты.
а как вы себе представляете файл, который не является набором бит? Все что есть не диске, все что хранится в памяти может быть только битами. Разница между бинарными и текстовыми данными кроется только в их интерпретации. То есть один и тот же файл является и текстом и бинарником одновременно, а как вы эти данные будете читать и что с ними делать - это зависит от вас, хотите читаете как текст, хотите как байты. В питоне вы выбираете формат в функции open. Посмотрите её документацию, там всё написано.
Jun
Фев. 15, 2021 18:51:22
FishHook
а как вы себе представляете файл, который не является набором бит?
Наоборот, я его представляю как область данных на носителе, у этой области есть начало и есть конец и от начала до конца, это набор битов. Мне просто нужно получить всю эту последовательность битов и вывести на экран.
Rodegast
Фев. 15, 2021 19:12:20
> Мне просто нужно получить всю эту последовательность битов и вывести на экран.
Вот так?
>>> data = open("/home/rodegast/pifagor.hs", "rb")
>>> " ".join(map(hex,list(data.read())))
'0xa 0x6d 0x61 0x69 0x6e 0x20 0x3d 0x20 0x70 0x75 0x74 0x53 0x74 0x72 0x4c 0x6e 0x20 0x28 0x63 0x6f 0x6e 0x63 0x61 0x74 0x20 0x5b 0x20 0x63 0x6f 0x6e 0x63 0x61 0x74 0x20 0x5b 0x20 0x73 0x68 0x6f 0x77 0x28 0x78 0x2a 0x79 0x29 0x20 0x2b 0x2b 0x20 0x22 0x5c 0x74 0x22 0x20 0x7c 0x20 0x79 0x20 0x3c 0x2d 0x20 0x5b 0x31 0x2e 0x2e 0x31 0x30 0x5d 0x20 0x5d 0x20 0x2b 0x2b 0x20 0x22 0x5c 0x6e 0x22 0x20 0x7c 0x20 0x78 0x20 0x3c 0x2d 0x20 0x5b 0x31 0x2e 0x2e 0x31 0x30 0x5d 0x20 0x5d 0x29 0xa'
doza_and
Фев. 15, 2021 21:33:36
Jun
Наоборот, я его представляю как область данных на носителе
Ну это не совсем так. Конечно границу между элементами файловой системы и файлами довольно трудно провести. Но обычно принято говорить что у файла есть имя, время создания время модификации, признаки разрешений доступа в ntfs есть произвольное число каналов записи. Когда файл открыли то у него есть позиции чтения записи. Атрибуты безопасности. Флаги признаков для разделяемого доступа, для отображения файла на память. Буфера операционной системы буфер устройства ввода вывода, raid контроллеры, контроллер переназначения секторов и т.п. и .т.д. А в Unix системах очень многие физические устройства имеют интерфейс как у файлов….
Когда вы работаете из питона с файлами то вы взаимодействуете со всей этой машинерией.
При помощи простого open вы не доберетесь до физической поверхности диска, с его головками дорожками секторами…