Python:读取文件并编辑其内容



我遇到了以下问题:我想读取一个由年份和温度两列组成的数据文本文件,并能够计算每年的最低温度等。整个文件的开头是这样的:

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,但仍处于初学者阶段,所以如果有一种方法可以在不使用"高级"命令的情况下完成整件事,我会欣喜若狂!

我可以使用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"])

您可以使用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模块文档

如果你只想要年份和时间:

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]

我之前提交过另一种方法,使用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

注意yearint的转换,这样您就可以直接将其与1995进行比较,以及之后的条件:

如果变量mintemp1995以前从未设置过(是None,因此是数据集的第一个条目(,或者当前温度低于该值,则它会替换它,因此您只有最低温度的记录。

相关内容

  • 没有找到相关文章

最新更新