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

时间:2014-08-06 15:58:04

标签: python fileparsing

我遇到了以下问题:我想读取一个数据文本文件,它包含两列,年份和温度,并且能够计算每年的最低温度等。整个文件的开头如下:

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,但仍处于初学者阶段,所以如果有办法在不使用“高级”命令的情况下完成整个过程,我会欣喜若狂!

4 个答案:

答案 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因此,数据集的第一个条目),或者当前温度低于此值,则会替换它,所以你有一个记录只有最低温度。