在文件中查找整数

时间:2018-10-16 23:43:40

标签: python file loops

我需要找到文件的整数。我需要获得这些整数的平均值(我已经弄清楚了这部分)。我收到错误消息:“输入[]错误:无法将'int'对象隐式转换为str”

编辑-代码正在运行。谢谢大家! DiCaprio帮助我提出了最终解决方案。

我将最终代码编辑为:

   def average_ints():
        integers = []
        num_ints = 0
        avg = 0
        with open("file") as f:
            for line in f:
                for i in line.split(' '):
                     integers.append(int(i))
                    num_ints = num_ints + 1
        avg = (sum(integers))/((num_ints))
        return avg

如何找到此文件的整数?

8 个答案:

答案 0 :(得分:2)

使用强制转换int(x)将str转换为int。默认情况下,所有内容都从文件读取为str。

def average_ints():
    integers = 0
    num_ints = 0
    avg = 0
    with open("associate.txt") as f:
        for line in f:
            for i in line:
                # if i in line: <- this should always be True
                integers += int(i)  # + integers <- += adds and stores
                num_ints = num_ints + 1
    avg = integers/num_ints
    return avg

编辑:

我只是认为您可能在for i in line:部分遇到了问题。 行将需要拆分。尝试使用for i in line.split(' '),假设您的整数被空格分隔。

编辑2:

如果每行一个整数,则使用:

def average_ints():
    integers = 0
    num_ints = 0
    avg = 0
    with open("associate.txt") as f:
        for line in f:
            integers += int(line)
            num_ints = num_ints + 1
    avg = integers/num_ints
    return avg

答案 1 :(得分:0)

这里的问题是,行中的'int'是一个字符串,您需要先将其转换为整数。您可以通过将int替换为int(int)来做到这一点。

这是假设文件中只有数字(可以用浮点数或整数表示的字符)。如果不是,则需要考虑这一点。

在内置函数后命名变量也不是一个好主意,因此我会将int的名称更改为其他名称。

答案 2 :(得分:0)

您可能不应使用“ int”作为变量,因为它是内置变量,如果以后尝试引用它,将无法使用。

因此,从外观上看,您想将文件中的所有整数取平均值吗?这是一个可以实现的功能:

def avg_ints(x): # Where x is a file
    total = 0
    count = 0
    lines = x.readlines()
    for line in lines:
        for character in line:
            try:
                character = int(character)
                count += 1
                total += character
            except ValueError:
                pass
    return total/count
f = open("associate.txt")
print(avg_ints(f))

答案 3 :(得分:0)

您是否尝试过使用正则表达式?对您来说可能会更容易一些。

读取文件,并使用类似这样的表达式可以解析文件中的整数。

[0-9]+

https://docs.python.org/3/howto/regex.html

我希望这会有所帮助。

答案 4 :(得分:0)

或者为什么不这样做,一个简单的解决方案:

def average_ints():
   with open("associate.txt") as f:
       integers=int(f.read())
       num_ints=len(str(integers))
   avg = integers/num_ints
   return avg

只需直接转换为整数,而无需深入每个字符

如果有非数字值:

def average_ints():
   num_ints=0
   integers=0
   with open("associate.txt") as f:
       for i in f.read():
           if i.isdigit():
               num_ints+=1
               integers+=int(i)
   avg = integers/num_ints
   return avg

答案 5 :(得分:0)

尝试使用另一种解决方案,但除外:

def average_ints():
    integers = 0
    num_ints = 0
    avg = 0
    with open("associate.txt") as f:
        for line in f:
            for s in line.split():
                try:
                    i = int(s)
                    integers = i + integers
                    num_ints = num_ints + 1
                except ValueError:
                    continue
    avg = integers/num_ints
    return avg

答案 6 :(得分:0)

您可以使用正则表达式模块轻松解决​​它。

import re

def avarage_ints():
    with open("associate.txt") as f:
        content = f.read()
    list_of_integer_strings = re.findall(r'\d+', content)
    list_of_integers = list(map(int, list_of_integer_strings))
    avg = sum(list_of_integers) / len(list_of_integers)
    return avg

该正则表达式将匹配文件内容中包含十进制数字的任何字符串,并且findall将返回包含它们的列表。

您可能要避免匹配单词中的整数。例如,不计算“ sample2”中的“ 2”。在这种情况下,您可以从r'\d+'更改正则表达式 到r'\A\d+\s|\s\d+\s|\s\d+$'

答案 7 :(得分:0)

我提供了DiCaprio答案的精简版,并做了一些修改,以确保您只收集整数并且可以将函数用于多个文件。

def average_ints(path):
    integers = []
    with open(path) as f:
        for line in f:
            for i in line:
                if i.isdigit(): # Checks if string i represents an integer
                    integers.append(int(i)) # Appends the string as an integer to your list
    return sum(integers) / len(integers) # Calculates the average of the list items

print(average_ints('associate.txt')) # Your specific use case