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

如何创建一个新目录,在其中用python保存我的天气文件?,python,Python,我的任务是手动创建一个新目录(右键单击,创建新文件夹),在其中保存我的48个天气文件。我的设置是使用:wunderground.com从网上获取4个城市的天气数据 具体而言,从该URL: 我的任务是从那个网站抓取数据,清理数据,然后保存 在这个问题上,我必须从互联网上访问数据48次,因为他们有4个站点(城市)和12个月。所以我想我必须为每个月创建一个文件,并保存所有每月记录的温度数据。然后将所有这些文件存储到一个目录文件中。我为此创建了一个函数: import urllib def acces

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

具体而言,从该URL:

我的任务是从那个网站抓取数据,清理数据,然后保存

在这个问题上,我必须从互联网上访问数据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()
stationID=[KCASANFR131、KDCWASHI48、IBRITISH359、KNYNEWYO639]
对于范围(1,13)内的i:
数据=访问数据(i)
filename=“0{}.2017.csv”。格式(i)
outfile=open(文件名“w”)
行计数=len(数据)
对于范围内的j(2,行计数):
如果(数据[j]!='
\n'和数据[j]!='n'): outfile.write(数据[j]) outile.close()
现在我要做的是将这些数据与脚本分开,所以我想使用以下格式将每个文件保存到预先制作的数据目录中 ...csv 示例:KDCWASHI48-04-2017.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是纬度/经度。

您已经涵盖了大部分内容

"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是纬度/经度。

构建代码结构 这里有一些指导方针可以帮助你进行冒险

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

像乐高积木一样思考,组件和小砖块,根据它们各自的类型和任务

数据结构 从你的数据结构开始,它们是你正在工作的基础,简单的制作,你只需要知道你正在做什么来制作它们。< /P>
class Station:
    def __init__(self, _id, _lat, _long):
        self.id = _id
        self.lat = _lat
        self.long = _long
在这里,我们创建了一个类,它可以作为来自
stations.csv
的信息的主页。这将使我们能够操作PythonObjects,而不仅仅是遍历列表(即使我们最终会这样做,我们也不必在需要时直接处理它),这也将使您的代码更清晰、更易于阅读,尤其是对于您以外的人

工厂 继续通过方法向类添加功能

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

让我们从分析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])
(这并没有考虑到列名位于第一行的可能性,并且假设列名不在第一行。)

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

print(stations[0].id)
[…]待继续;如果需要。(工作有点忙)

构建代码 这里有一些指导方针可以帮助你进行冒险

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

像乐高积木一样思考,组件和小砖块,根据它们各自的类型和任务

数据结构 从你的数据结构开始,它们是你正在工作的基础,简单的制作,你只需要知道你正在做什么来制作它们。< /P>
class Station:
    def __init__(self, _id, _lat, _long):
        self.id = _id
        self.lat = _lat
        self.long = _long
在这里,我们创建了一个类,它可以作为来自
stations.csv
的信息的主页。这将使我们能够操作PythonObjects,而不仅仅是遍历列表(即使我们最终会这样做,在需要时也不必直接处理),这将是一个