如何在.txt文件中找到最高值?

时间:2015-08-28 04:37:37

标签: python file

我发送这个是因为我被困在一个代码上,我一整天都试着去找它。

这是python中的一个程序,它读取一个包含大量浮点值(1亿+)的.txt文件,并从中获取最高值和最低值。

我遇到了很多问题,第一个说我无法将字符串转换为浮点数来比较值。

新代码不显示值。

一些细节:

  • 这些行有多个值,我尝试使用split来获取它们。
  • 所有数字都是浮点数

这是代码:

with open('gmm_data.txt') as f:
    array = []
    minim = 99999999999999
    maxim = -99999999999999
    for line in f: # read rest of lines
        array.append([float(x) for x in line.split()])
    if(array[0] > maxim):
        maxim = array[0]
    elif(array[0] < minim):
        minim = array[0]

print (maxim)
print (minim)

4 个答案:

答案 0 :(得分:2)

您说您的文件中有超过百万个浮点值,如果是这样,您不应该将整个文件读入内存并将它们存储为浮点数。

相反,你应该读取每一行,将一行中的所有值转换为float,然后尝试从中找到最大值/最小值,然后存储一个变量,用于表示文件中的最大和最小元素,并检查是否每行的最大值和最小值大于/小于这些值并相应地替换。

要初始化,您可以将最大值初始化为array[-1]。示例 -

float('-inf')

答案 1 :(得分:1)

这是一个很好的干净方法:

def min_and_max(iterable):
    iterator = iter(iterable)

    # Assumes at least two items in iterator
    minim, maxim = sorted((next(iterator), next(iterator)))

    for item in iterator:
        if item < minim:
            minim = item
        elif item > maxim:
            maxim = item

    return (minim, maxim)


with open('gmm_data.txt', 'r') as f:
    values = (float(value_str) for line in f for value_str in line.split())
    minim, maxim = min_and_max(values)

print(maxim)
print(minim)

请记住,float可能不精确;如果您需要更准确的数字,请考虑使用decimal.Decimal()

答案 2 :(得分:0)

在您的比较步骤中,您似乎想要访问数组的 last 元素(因为这是新值append的位置;这是通过Python实现的{ {1}}。

答案 3 :(得分:0)

如果您阅读整个文件。您可以使用此方法。

<强>代码:

def conversion(num):
    try:
        num=float(num)
        return True
    except Exception:
        return False

with open('a.txt') as f:
    numbers=[float(num) for line in f for num in line.split() if conversion(num) ]
minim = 99999999999999
maximum= -99999999999999
if numbers:
    if max(numbers)>maximum:
        maximum=max(numbers)
    if min(numbers)<minim:
        minim=min(numbers)
print "maximum value:"+str(maximum)
print "minimum value:"+str(minim)

如果您的文件非常大。那么您可以使用它。

<强>代码2:

def conversion(num):
    try:
        num=float(num)
        return True
    except Exception:
        return False

minim = 99999999999999
maximum= -99999999999999
with open('a.txt') as f:
    for line in f:
        numbers=[float(num) for num in line.split() if conversion(num) ]
    if numbers:
        if max(numbers)>maximum:
            maximum=max(numbers)
        if min(numbers)<minim:
            minim=min(numbers)
print "maximum value:"+str(maximum)
print "minimum value:"+str(minim)