如何创建一个新的目录来保存python中的天气文件?

2024-09-30 04:40:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我的任务是手动创建一个新目录(右键单击,创建新文件夹),在其中保存我的48个天气文件。我的设置是通过以下方式从4个城市的网站获取天气数据:wunderground.com网站你知道吗

具体来说,从这个URL:https://www.wunderground.com/weatherstation/WXDailyHistory.asp?ID=KMDLAURE5&year=2018&month=2&graphspan=month&format=1

我的任务是从那个网站抓取数据,清理数据,然后保存它。你知道吗

在这个问题上,我必须从互联网上访问数据48次,因为他们是4站(城市)和12个月。所以我想我必须为每个月创建一个文件并保存它每月记录的所有温度数据。然后将所有这些文件存储到一个目录文件中。我为此创建了一个函数:

import urllib

def accessData(ID, Month):
 url="https://www.wunderground.com/weatherstation/WXDailyHistory.asp?ID=" + str(ID) + "&year=2017=7&month=" + str(Month) + "&graphspan=month&format=1"

 infile = urllib.urlopen(url)
 readline = infile.readlines()
 infile.close()
 return readline

现在我得到了一个单独的文件叫做站点.csv其中包含以下数据:

KCASANFR131,37.778,-122.408

KDCWASHI48,38.913,-77.031

IBRITISH359,49.256,-123.245

KNYNEWYO639,40.755,-74.007

我知道,例如KCASANFR131是站点ID,但是37.778,-122.408是什么?不确定那代表什么。你知道吗

另外,我应该创建一个存储站点ID的列表吗?然后在我的嵌套循环中调用它们,或者有方法从csv文件本身调用这些id吗?你知道吗

既然我有了这个函数,在函数外创建一个嵌套循环,然后在嵌套循环内调用函数是有意义的。对于每个站点ID,这将是外循环,12个月将是内循环。你知道吗

在完成一个完整的迭代之后,它应该返回一个包含该web请求结果的列表。你知道吗

下面是代码(删除了带有if语句的标题:

如果我把那个ID数据存储在一个列表中

stationID = [KCASANFR131, KDCWASHI48, IBRITISH359, KNYNEWYO639]

for i in range(1,13):
    data = accessDat(i)
    filename = "0{}.2017.csv".format(i)
    outfile = open(filename, 'w')
    row_count = len(data)

      for j in range (2, row_count):
        if(data[j] != '<br>\n' and data[j] != 'n'):
          outfile.write(data[j])

outile.close()

现在我要做的是将这些数据与脚本分开。所以我想使用以下格式将每个文件保存到一个预先生成的数据目录中 ­­.csv文件 示例:KDCWASHI48­04­2017.csv

我还需要有前导零,所以这个月应该总是2个字符长。例如,一月看起来像01,十二月是12,如何使用街道zfill(2) 方法?你知道吗


Tags: 文件csv数据函数目录comidformat
2条回答

你已经把大部分都搞定了。你知道吗

"1".zfill(2)

结果是01,你可能已经猜到了。你知道吗

排队

outfile = open(filename, 'w')

最好给出数据目录的具体路径。你知道吗

outfile = open(os.path.join([*data_dir_path, month_path, filename]), 'w')

看一下这篇文章

How can I create a directory if it does not exist?

如果你想知道如何创建一个不存在的目录。你知道吗

我希望这能解决所有的问题,Antry正确地提到49.256,-123.245是纬度/经度。你知道吗

构造代码

以下是一些指导方针,以帮助你的冒险。你知道吗

当开发一个程序时,你通常想把它设计成一个工厂,在一个命令链中优雅的单个模块。而不是僵硬/绝对的代码,没有可维护性、可伸缩性或概念的抽象

像乐高积木一样思考,组件和小砖块,根据它们的类型和任务。你知道吗

数据结构

从你的数据结构开始,它们是你工作的基础,简单的制作,你只需要知道你在做什么来制造它们。你知道吗

class Station:
    def __init__(self, _id, _lat, _long):
        self.id = _id
        self.lat = _lat
        self.long = _long

在这里,我们创建了一个类,它可以作为stations.csv信息的归宿,这将允许我们操作PythonObjects,而不是只遍历列表(即使我们最终会这样做,在需要时也不必直接处理它),这也将使您的代码更清晰,更易于阅读,尤其是对你以外的人。你知道吗

工厂

通过方法向类中添加功能。你知道吗

我们将首先创建一个工厂类,我们可以称之为Utility,它将负责导入和填充类例如,通过这样做,我们将信息层从逻辑层抽象出来,因此,您将永远不必在主程序循环中操纵解析(我不是在说__main__)。你知道吗

我们先从CSV解析站点信息开始:

import csv

stations = []

with open('stations.csv', 'r') as f:
    reader = csv.reader(f) 
    for row in reader:     
        clean_row = row.split(“,”)        
        stations.append(Station(clean_row[0], clean_row[1], clean_row[2])

(这并没有考虑到列名位于第一行的可能性,并假定它们不是。)

现在我们已经用Stationpython对象填充了stations列表,我们可以使用这些对象直接访问数据:

print(stations[0].id)

[…]待续;如有要求。(工作压力有点大)

相关问题 更多 >

    热门问题