TypeError(“'_ io.TextIOWrapper'对象不可调用”)

时间:2019-02-24 11:03:37

标签: python

应该找到代码。但是我得到了错误:

ValueError。有人可以帮我解决问题吗?谢谢。

integers.close() # closes the file

# print results
print (smallest, biggest)

2 个答案:

答案 0 :(得分:1)

问题是读取文件或文件的每一行都提供一个String类型的行,您的程序无法以正确的方式处理输入。 如果您希望代码工作,则应该执行以下操作:

integers = open('/home/user/Documents/number.txt', 'r')
biggest = float('-inf')
smallest = float('inf')

for line in integers:
    for number in line.split(' '): # Splitting the line counting on spacing between numbers
        curr = int(number) # Casting each string to an integer type
        if biggest < curr:
            biggest = curr
        if smallest > curr:
            smallest = curr

integers.close()  # closes the file

# print results
print(smallest, biggest)

如果您想使用Python读/写文件,建议使用文件处理程序,您可以进一步阅读here

在这里的示例中,我已经:

  • 打开文件并将所有行读取到列表中
  • 使用列表理解功能,我已经建立了一个数字列表
  • 使用Python内置数学函数max和min从列表中打印它们。

代码:

    with open('number.txt', 'r') as txtfile:
        numbers_list = txtfile.readlines()
    numbers = [int(num) for curr_line in numbers_list for num in curr_line.split(' ')]
    print(min(numbers), max(numbers))

答案 1 :(得分:0)

您的问题,是由对文件读取内容的错误处理引起的。 要从行尾丢弃换行符(\n),可以使用.rstrip('\n')方法,例如:

x = '1 2 3\n'
y = x.rstrip('\n')
print(y)

将打印: 1 2 3(无换行符)

或者,您可以使用.splitlines()方法,如下所示:

file = open('numbers.txt','r')
data = file.read().splitlines()
file.close()

在这种情况下,datalist中的str,每个代表文件的一行。您将需要使用.split(' ')方法来获取特定数字,并需要使用intstr转换为int,例如:

a = '1 2 3'
b = [int(i) for i in a.split(' ')]
print(b) #prints [1, 2, 3]

在正确的listint之后,您可以实现自己的 min max 查找。