我遇到了以下问题:我想读取一个数据文本文件,它包含两列,年份和温度,并且能够计算每年的最低温度等。整个文件的开头如下:
1995.0012 -1.34231
1995.3030 -3.52533
1995.4030 -7.54334
依此类推,直到2013年。我有以下想法:
f=open('munich_temperatures_average.txt', 'r')
for line in f:
line = line.strip()
columns = line.split()
year = float(columns[0])
temperature=columns[1]
if year-1995<1 and year-1995>0:
print 1995, min(temperature)
有了这个,我只得到1995年的数据,这是我想要的第一步。在第二步中,我想计算1995年整个数据集的最低温度。通过使用上面的脚本,我获得了数据文件中每一行的最低温度。我尝试建立一个列表然后追加温度,但如果我想将年份转换为整数或将温度转换为浮点数等,我会遇到麻烦。
我觉得我错过了正确的想法,如何计算列中一组值的最小值(但不是整列的最小值)。
我有什么想法可以解决上述问题?我正在尝试学习Python,但仍处于初学者阶段,所以如果有办法在不使用“高级”命令的情况下完成整个过程,我会欣喜若狂!
答案 0 :(得分:0)
我可以使用regexp
执行此操作import re
from collections import defaultdict
REGEX = re.compile(ur"(\d{4})\.\d+ ([0-9\-\.\+]+)")
f = open('munich_temperatures_average.txt', 'r')
data = defaultdict(list)
for line in f:
year, temperature = REGEX.findall(line)[0]
temperature = float(temperature)
data[year].append(temperature)
print min(data["1995"])
答案 1 :(得分:0)
您可以使用csv
模块,这样可以非常轻松地阅读和操作文件的每一行:
import csv
with open('munich_temperatures_average.txt', 'r') as temperatures:
for row in csv.reader(temperatures, delimiter=' '):
print "year", row[0], "temp", row[1]
之后,只需找到行中的最低温度即可。看到 csv module documentation
答案 2 :(得分:0)
如果你只想要岁月和温度:
years,temp =[],[]
with open("f.txt") as f:
for line in f:
spl = line.rstrip().split()
years.append(int(spl[0].split(".")[0]))
temp.append(float(spl[1]))
print years,temp
[1995, 1995, 1995] [-1.34231, -3.52533, -7.54334]
答案 3 :(得分:0)
我之前使用numpy
库提交了另一种方法,考虑到您是python的新手,可能会让人感到困惑。对不起。正如你自己提到的,你需要有一些1995年的记录,但你不需要一个列表:
mintemp1995 = None
for line in f:
line = line.strip()
columns = line.split()
year = int(float(columns[0]))
temp = float(columns[1])
if year == 1995 and (mintemp1995 is None or temp < mintemp1995):
mintemp1995 = temp
print "1995:", mintemp1995
请注意int
的{{1}}的演员表,因此您可以将其直接与1995年比较,以及之后的条件:
如果变量year
之前从未设置过(mintemp1995
因此,数据集的第一个条目),或者当前温度低于此值,则会替换它,所以你有一个记录只有最低温度。