Home > OS >  find the smallest number in a text file (python)
find the smallest number in a text file (python)

Time:10-14

So I have a text file with roughly 400 lines, each line has a number and I need to find the smallest of these numbers.

I currently have

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

But it doesnt work for some reason. What would be the best way to get the smallest number in the .txt file? (fread is the .txt file that I have opened in main() function! And I will write the number to fwrite, once I manage to figure it out lol)

EDIT: I get an error (ValueError) at the smallest = min(number) part saying "min() arg is an empty sequence".

EDIT2: I am using a test.txt file to test the code first before, and its just

1000 700 450 200 100 10 1 on different lines each So the same format/type as the file I am supposed to use

fread (where I get the numbers) and fwrite (where i want to save the numbers) are defined as follows in 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

I'm sorry for possible bad "formating" etc of this question, I am new to python and StackOverflow!

Thanks for the help!

CodePudding user response:

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])

I did not run the code, but it should work. It would be best if you had more error-checking. For example, int(line) could throw an exception if line is not a number.

Your code does not work because list comprehensions should use square brackets instead of curly brackets.

It should be [int(line) for line in fread] and not {int(line) for line in fread}

Once you have a list the function min also will work.

CodePudding user response:

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)
  • Related