Python 如何从长文件中打印最大值和最小值?

Python 如何从长文件中打印最大值和最小值?,python,Python,因此,我无法从文件中打印最大值和最小值,该文件有3000多行,如下所示: 3968 #number of lines 2000-01-03, 3.738314 2000-01-04, 3.423135 2000-01-05, 3.473229 ... ... 2015-10-07, 110.779999 2015-10-08, 109.50 2015-10-09, 112.120003 #as the first line in your txt is no

因此,我无法从文件中打印最大值和最小值,该文件有3000多行,如下所示:

3968 #number of lines  
2000-01-03, 3.738314  
2000-01-04, 3.423135  
2000-01-05, 3.473229  
...  
...  
2015-10-07, 110.779999  
2015-10-08, 109.50  
2015-10-09, 112.120003  
#as the first line in your txt is not data
datanew=data[1:]

prices=[]
line_after=[]
for line in datanew:
    line_after=line.split(',')
    price=line_after[1]
    prices.append(float(price))
maxprice=max(prices)
minprice=min(prices)

这是我当前的代码,我不知道如何使它工作,因为现在它只打印
3968
值,因为它显然是最大的,但我希望从第二列(所有股票价格)得到最大和最小的值


您希望使用
float(datum.split(',)[1].strip())
将第二列提取到一个float中,并忽略第一行

def apple():
    stock_file = open('apple_USD.txt', 'r')
    data = stock_file.readlines()
    data = data[1:] #ignore first line
    stock_file.close()

    data = [datum.split(', ') for datum in data]

    max_value_date, max_value = max(data, key=lambda data: float(data[-1].strip()))
    print(max_value_date, max_value)
#import module    
import pandas as pd

#load file
df = pd.read_csv('test.csv', names=['date', 'value'], skiprows=[0])

#get max and min values
max_value = df['value'].max()
min_value = df['value'].min()

您当前的代码偶然输出“正确”的输出,因为它使用字符串比较

考虑这一点:

with open('test.txt') as f:
    lines = [line.split(', ') for line in f.readlines()[1:]]
    # lines is a list of lists, each sub-list represents a line in a format [date, value]

max_value_date, max_value = max(lines, key=lambda line: float(line[-1].strip()))
print(max_value_date, max_value)
# '2015-10-09' '112.120003' 

当前代码将每行作为字符串读取,然后查找列表的最大和最小行。您可以使用pandas将文件读取为CSV,并将其加载为数据帧,然后对数据帧执行最小、最大操作 希望下面能回答你的问题

stocks = []
data=data[1:]
for d in data:
    stocks.append(float(d.split(',')[1]))
print(max(stocks))
print( min(stocks))

我建议
Pandas
模块使用表格数据和函数。是非常好的文件,优化和非常流行的目的。您可以使用
pip
使用
pip-install-pandas
安装它

我用您的格式创建了一个哑文件,并存储在名为
test.csv
的文件中:

3968 #number of lines
2000-01-03, 3.738314
2000-01-04, 3.423135
2000-01-05, 3.473229
2015-10-07, 110.779999
2015-10-08, 109.50
2015-10-09, 112.120003
然后,要解析文件,可以执行以下操作。Names参数定义列的名称。Skiprows允许您跳过第一行

def apple():
    stock_file = open('apple_USD.txt', 'r')
    data = stock_file.readlines()
    data = data[1:] #ignore first line
    stock_file.close()

    data = [datum.split(', ') for datum in data]

    max_value_date, max_value = max(data, key=lambda data: float(data[-1].strip()))
    print(max_value_date, max_value)
#import module    
import pandas as pd

#load file
df = pd.read_csv('test.csv', names=['date', 'value'], skiprows=[0])

#get max and min values
max_value = df['value'].max()
min_value = df['value'].min()

或者你可以用一种更简单的方法来做:列出价格,然后得到最高和最低价格。像这样:

3968 #number of lines  
2000-01-03, 3.738314  
2000-01-04, 3.423135  
2000-01-05, 3.473229  
...  
...  
2015-10-07, 110.779999  
2015-10-08, 109.50  
2015-10-09, 112.120003  
#as the first line in your txt is not data
datanew=data[1:]

prices=[]
line_after=[]
for line in datanew:
    line_after=line.split(',')
    price=line_after[1]
    prices.append(float(price))
maxprice=max(prices)
minprice=min(prices)


最好使用上下文管理器对文件进行迭代,例如将open('apple_USD.txt','r')作为文件:对于文件中的行:#使用行做一些事情,一旦退出上下文管理器块,这也会自动关闭文件。是的,谢谢,这很有效,但是我如何打印整行的日期呢?我已经根据@DeepSpace的答案对其进行了更新,以同时打印日期谢谢,还有一个问题,当我打印(max_值-min_值)时,它将其读取为字符串而不是浮点数,因为我想要从max_值和min_值中获得利润?
print(max_值.split(',')[-1]-min_value.split(“,”)[-1])