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



我的任务是必须手动创建一个新目录(右键单击,创建新文件夹),在其中保存我的 48 个天气文件。我的设置是我使用以下方法从网络上获取来自 4 个城市的天气数据: wunderground.com

具体来说,从这个网址: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

现在我得到了一个名为 stations.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 示例:KDCWASHI48042017.csv

此外,我需要有前导零,所以月份应该始终是 2 个字符长。例如,一月看起来像 01,十二月看起来像 12,如何使用 str.zfill(2) 方法做到这一点?

你已经涵盖了大部分内容。

"1".zfill(2)

将产生 01,您可能已经猜到了。

在行中

outfile = open(filename, 'w')

最好给出数据目录的特定路径。

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

看看帖子

如果目录不存在,如何创建目录?

如果您想知道如何创建目录(如果它不存在)。

我希望这能解决所有问题,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)

[...]待续;如有要求。(有点高工作)

相关内容

最新更新