Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
8 / 5 / 3
Регистрация: 18.03.2019
Сообщений: 122
1

Считывание побитово из файла

15.02.2020, 13:21. Просмотров 2233. Ответов 15
Метки нет (Все метки)


Ребят, пожалуйста, помогите разобраться в считывание информации побитово из файла, написал вот такой код:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# -*- coding: utf-8 -*-
a = int(input("Введите первое число: "))
b = int(input("Введите второе число: "))
sum1 = str(a + b)
dif1 = str(a - b)
pr1 = str(a * b)
div1 = str(a / b)
 
print("Сумма равна:", sum1)
print("Разность равна:", dif1)
print("Произведение равно:", pr1)
print("Деление равно:", div1)
file = open("sum.txt", "w")
file.write("Сумма равна: " + sum1 + ";")
file = open("sum.txt", "a")
file.write(" это сумма \n")
 
 
file2 = open("dif.txt", "w")
file2.write(" Разность равна: " + dif1 + ";")
file2 = open("dif.txt", "a")
file2.write(" это разность\n")
file.close()
Так вот, мне необходимо считать информации побитово из КАЖДОГО файла, т.е. из файла sum и dif. Как это реализуется?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.02.2020, 13:21
Ответы с готовыми решениями:

Считывание числа побитово
Помогите пожалуйста. Есть число,скажем 0b00001001. Необходимо каждый бит ДВОИЧНОГО числа сравнить...

Прочитать побитово с файла и записать их в мой массив BitArray
Доброго времени суток! Я сделал битовую запись в файл: string pth = path + ".hfmn"; ...

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

Считывание файла в массив и запись нового файла
Консоль VS C++. Текстовый файл открывается как бинарный, и считывается по 100 байт в массив - и...

15
Просто Лис
Эксперт Python
4246 / 2656 / 911
Регистрация: 17.05.2012
Сообщений: 7,916
Записей в блоге: 9
15.02.2020, 13:28 2
Может, побайтно?
0
8 / 5 / 3
Регистрация: 18.03.2019
Сообщений: 122
15.02.2020, 13:37  [ТС] 3
Да, ошибся, побайтово конечно
0
3729 / 2683 / 613
Регистрация: 08.06.2007
Сообщений: 9,241
Записей в блоге: 4
15.02.2020, 13:53 4
Побайтно можно считать двоичным вводом, например
Python
1
2
3
f = open ("text.txt", "rb")
data = f.read()
print (type(data), len(data), data[5])
Только надо понимать, что в файле у вас символы, а получите вы байты. Если кодировка utf-8, то русский символ представлен двумя байтами.

Добавлено через 1 минуту
В ОС фирмы Microsoft символ новой строки тоже представлен двумя байтами.
2
8 / 5 / 3
Регистрация: 18.03.2019
Сообщений: 122
15.02.2020, 13:56  [ТС] 5
Разве этот код не выдаёт просто количество байт, которое занимает текст в файле?
0
3729 / 2683 / 613
Регистрация: 08.06.2007
Сообщений: 9,241
Записей в блоге: 4
15.02.2020, 14:00 6
Цитата Сообщение от NaxUK Посмотреть сообщение
Разве этот код не выдаёт просто количество байт, которое занимает текст в файле?
Да. Еще выдает тип данных, которые вы прочитали и байт с индексом 5.
Вы спрашивали как прочитать. Я ответил и постарался объяснить. Других вопросов от вас я не уловил.
0
8 / 5 / 3
Регистрация: 18.03.2019
Сообщений: 122
15.02.2020, 14:11  [ТС] 7
Да, я понял это, пытался написать подобный код, но он не выдаёт абсолютно никаких данных
Python
1
2
3
4
5
6
7
8
9
10
file = open("sum.txt", "rb")
b = file.read(1)
str = ""
while True:
    b = f.read(1)
    if b == b'':
        break
    str += b.hex()
    print(str)
f.close()
И данные туда записывал вот таким образом:
Python
1
2
file = open("sum.txt", "wb")
file.write(bytes("Сумма равна: " + sum1 + ";", "cp1251"))
0
3729 / 2683 / 613
Регистрация: 08.06.2007
Сообщений: 9,241
Записей в блоге: 4
15.02.2020, 15:15 8
Вы открываете file, а читаете f. print внутри цикла это так задумано?
0
8 / 5 / 3
Регистрация: 18.03.2019
Сообщений: 122
15.02.2020, 15:17  [ТС] 9
Нет, я когда перепечатывал, исправил, всё вышло, проблемы были в файле с записью
0
3729 / 2683 / 613
Регистрация: 08.06.2007
Сообщений: 9,241
Записей в блоге: 4
15.02.2020, 15:18 10
Наверно логичнее было спросить len(b) для определения конца файла.
0
8 / 5 / 3
Регистрация: 18.03.2019
Сообщений: 122
15.02.2020, 15:20  [ТС] 11
Тогда проверялось бы на 1 условие больше, как я понимаю и результат был бы таким, ведь мы определяем в любом случае конец текста в файле? или что вы подразумеваете?
0
3729 / 2683 / 613
Регистрация: 08.06.2007
Сообщений: 9,241
Записей в блоге: 4
15.02.2020, 15:26 12
Лучший ответ Сообщение было отмечено NaxUK как решение

Решение

Если длина равна нулю, то ничего не прочитано, и файл кончился. А не хотите сделать без цикла?
Python
1
2
b = f.read()
print(b.hex())
1
8 / 5 / 3
Регистрация: 18.03.2019
Сообщений: 122
15.02.2020, 16:36  [ТС] 13
Да, но тогда выходит разный ответ и вообще не понятно
f3ecece020f0e0e2ede03a20373b20fdf2ee20f1f3ecece00d0a - с циклом
d1f3ecece020f0e0e2ede03a20373b20fdf2ee20f1f3ecece00d0a - без цикла
Очень странно
0
3729 / 2683 / 613
Регистрация: 08.06.2007
Сообщений: 9,241
Записей в блоге: 4
15.02.2020, 17:22 14
Ничего странного. Вы же в своей программе прочитали один байт вне цикла. Я предложил замену самому циклу.
0
8 / 5 / 3
Регистрация: 18.03.2019
Сообщений: 122
15.02.2020, 17:25  [ТС] 15
Спасибо, я разобрался в чём и смысл и почему так
0
Просто Лис
Эксперт Python
4246 / 2656 / 911
Регистрация: 17.05.2012
Сообщений: 7,916
Записей в блоге: 9
15.02.2020, 17:26 16
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#a = int(input("Введите первое число: "))
#b = int(input("Введите второе число: "))
a = 15
b = 5
with open('sum.txt', 'w') as f:
    print(a + b, file=f)
 
with open('diff.txt', 'w') as f:
    print(a - b, file=f)
 
with open('sum.txt') as f:
    s = f.read()
    s = int(s)
    print('сумма:', s)
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.02.2020, 17:26

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

как считать побитово в C++?
как считать побитово в C++?

Побитово зашифровать и сохранить файл
Всем привет! Такая проблема: Есть набор битов, нужно создать новый файл, который будет в виде этих...

Запись в файл побитово потоком
Как с помощью cout записывать побитово? Я думал, что это делается с помощью - ios :: binary . Но...

Побитово скопировать содержимое переменной
Здравствуйте, есть задача: На языке программирования C++ написать программу для визуализации...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.