我发送这个是因为我被困在一个代码上,我一整天都试着去找它。
这是python中的一个程序,它读取一个包含大量浮点值(1亿+)的.txt文件,并从中获取最高值和最低值。
我遇到了很多问题,第一个说我无法将字符串转换为浮点数来比较值。
新代码不显示值。
一些细节:
这是代码:
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)
答案 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)