найдите наименьшее число в текстовом файле (python).

#python #file #text #numbers

Вопрос:

Итак, у меня есть текстовый файл примерно с 400 строками, в каждой строке есть номер, и мне нужно найти наименьшее из этих чисел.

В настоящее время у меня есть

 def smallestnumber(fread, fwrite):
number = {int(line) for line in fread}
smallest = min(number)
print ("smallest number is", smallest)
 

Но по какой-то причине это не работает. Как лучше всего получить наименьшее число в файле .txt? (fread-это файл .txt, который я открыл в функции main ()! И я напишу номер для записи, как только мне удастся это выяснить, лол)

РЕДАКТИРОВАТЬ: Я получаю ошибку (ошибку значения) в наименьшей части = min(число), в которой говорится: «min() arg-пустая последовательность».

EDIT2: Я использую test.txt файл, чтобы сначала протестировать код, и его просто

1000 700 450 200 100 10 1 в разных строках, каждый из которых имеет тот же формат/тип, что и файл, который я должен использовать

фрейд (где я получаю числа) и fwrite (где я хочу сохранить числа) определяются следующим образом в main()

 name= input("Give the name of the file which to take data from: ")
fread = open(name, "r") #File which is being read
name2= input("Give the name of the file where to save to: ")
fwrite = open(name2, "w") #File which is being typed to
 

Я прошу прощения за возможное плохое «формирование» и т. Д. Этого вопроса, я новичок в python и StackOverflow!

Спасибо за помощь!

Комментарии:

1. Отредактируйте вопрос, чтобы объяснить «не работает», что происходит?

2. что еще содержится в этой строке?

3. Ошибка означает, что заданный номер пуст, можете ли вы показать нам, что такое fread?

4. Ошибка, которую вы получили, говорит о том, что в вас нет элементов number . Единственный способ, которым это могло бы быть, — если fread не создает значений, например, если это дескриптор пустого файла, или это пустой список, или пустая строка, или что-то в этом роде. Как говорит киншукдуа, покажите нам, как fread это определяется.

5. Можете ли вы показать часть вашего txt-файла?

Ответ №1:

 def smallestnumber(fread, fwrite):
    # store the numbers in a list
    numbers = [int(line) for line in fread]
    # sort the list so that the smallest number is the first element of the list
    numbers.sort()
    # print the first element of the list which contains the smallest number 
    print ("smallest number is: {0}".format(numbers[0])
 

Я не запускал код, но он должен работать. Было бы лучше, если бы вы чаще проверяли ошибки. Например, int(line) может выдать исключение, если line это не число.

Ваш код не работает, потому что для понимания списка следует использовать квадратные скобки вместо фигурных скобок.

Так должно быть [int(line) for line in fread] , а не {int(line) for line in fread}

Как только у вас появится список, функция min также будет работать.

Комментарии:

1. По какой-то причине это все еще не работает. Я изменил скобки с {} — > [], но все равно говорится, что min() arg-пустое предложение :/

2. если там написано, что arg is an empty sequence это означает, что вы неправильно читаете файл, а список внутри функции min пуст.

3. Это странно. У меня есть тот же фрейд, который используется в другой функции, которая вычисляет общую сумму чисел, и я заставил ее работать просто отлично. Фрейд прикреплен к дескриптору под названием «файл», и я использовал file = (имя, «r»), чтобы открыть его в начале main()

4. Тогда это означает, что вы уже прочитали файл до конца в своей предыдущей функции. добавьте fread.seek(0) перед numbers = [int(line) for line in fread] , чтобы вернуться в начало файла.

5. это работает!! Большое вам спасибо @andrea ! Вы спасли мое психическое здоровье и, возможно, мою оценку по курсу программного обеспечения! <3

Ответ №2:

 max=-9999
for line in open('lines.txt').readlines():
  #print(line)
  for word in line.split():
    #print(word,word.isnumeric())
    if word.isnumeric() and int(word)>max:
      max=int(word)
print(max)