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

2024-06-13 09:19:43 发布

您现在位置: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,但还处于初学者阶段,所以如果有一种方法可以不用“高级”命令就完成整个过程,我会欣喜若狂!你知道吗


Tags: columns文件数据方法txtlineopen温度
3条回答

如果你只想要这些年和时间:

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]

您可以使用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

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

相关问题 更多 >