Как прочитать двоичный файл (.dat) и вернуть наибольшее значение типа int python - PullRequest
0 голосов
/ 10 марта 2020

У меня проблемы с работой с целыми числами, которые я пропускаю через l oop, и распечатываю в двоичном файле.

У меня есть основная программа, которая создает двоичный файл и записывает в x количество случайных целых чисел. файл, затем закрывает файл.

* Во всех этих фрагментах кода я импортирую дамп и загружаю из pickle

from pickle import dump
from random import randint

output_file = open('file.dat', 'wb')
    # 10 random integers
    for i in range(10):
        dump(randint(1, 100), output_file)
    output_file.close()

Я создал программу, которая откроет этот файл, откроет каждое целое число и распечатать их. Однако теперь я также хочу поработать с этими числами: max, min, sum и т. Д. c. Когда я пытаюсь создать код, который (я думал) будет делать это, я получаю:

33 Traceback (most recent call last): File "binary_int_practice.py", line 13, in <module> for i in load(input_file): TypeError: 'int' object is not iterable

Мой код ниже:

input_file = open('file.dat', 'rb')
print("Here are the integers:")
while True:
    try:
        i = load(input_file)
        print(i, end=' ')
        big = 0
        for i in load(input_file):
            if i > big:
                big = i
        print('The max number in the file is: ', big)
    except EOFError:
        input_file.close()
        break

Может кто-то объяснить или помочь мне понять, где я иду не так?

Спасибо

Ответы [ 2 ]

2 голосов
/ 10 марта 2020

load возвращает следующее значение, прочитанное из файла; в вашем случае каждое прочитанное значение равно int (так же, как вы их написали). Он не возвращает итерацию, которую вы можете l oop сверх.

Таким образом, вам нужно будет получить каждый номер с его собственным вызовом load.

0 голосов
/ 10 марта 2020

Вы должны использовать список, заполнить его и добавить в файл, используя «dump». потому что на каждой итерации номер "randint" меняется в файле.

вот код, который хорошо работает

from pickle import dump
from random import randint

output_file = open('file.dat', 'wb')
# 10 random integers
data = []
for i in range(10):
    data.append(randint(1, 100))
dump(data, output_file)
output_file.close()
...