示例#1
0
def test_parse_date():
    assert parse_date("1851-06-25T00:00") == datetime.datetime(1851, 6, 25)
    assert parse_date("1851-06-25T06:00") == datetime.datetime(1851, 6, 25, 6)
    assert parse_date("1851-06-25") == datetime.datetime(1851, 6, 25)

    assert parse_date("18510625") == datetime.datetime(1851, 6, 25)
    assert parse_date(18510625) == datetime.datetime(1851, 6, 25)

    assert parse_date("1851-06-25 06:00:00") == datetime.datetime(
        1851, 6, 25, 6)
    assert parse_date("1851-06-25T06:00:00") == datetime.datetime(
        1851, 6, 25, 6)
    assert parse_date("1851-06-25T06:00:00Z") == datetime.datetime(
        1851, 6, 25, 6, tzinfo=datetime.timezone.utc)

    assert parse_date(-2) == parse_date(0) - datetime.timedelta(days=2)
示例#2
0
    def _load(self, bassin="atlantic", url=None):

        if url is None:
            url = URLS[bassin.lower()]

        path = download_and_cache(url)
        p = []
        with open(path) as f:
            lines = f
            for line in lines:
                if line[0] in (" ", "<", "\n"):
                    continue

                bassin = line[0:2]
                number = int(line[2:4])
                year = int(line[4:8])
                name = line[18:28].strip().lower()
                # id = line[0:8]

                # http://www.aoml.noaa.gov/hrd/hurdat/hurdat2-format-may2015.pdf

                for _ in range(0, int(line[33:36])):
                    line = next(lines)
                    knots = float(line[38:41])
                    pressure = np.NaN if line[43] == "-" else float(line[43:47])
                    time = "%s-%s-%sZ%s:%s" % (
                        line[0:4],
                        line[4:6],
                        line[6:8],
                        line[10:12],
                        line[12:14],
                    )
                    p.append(
                        dict(
                            # id=id,
                            bassin=bassin,
                            number=number,
                            year=year,
                            name=name,
                            time=parse_date(time),
                            type=line[16],
                            status=line[19:21],
                            lat=float(line[23:27]) * SIGN[line[27]],
                            lon=float(line[30:35]) * SIGN[line[35]],
                            knots=knots,
                            category=category(knots),
                            pressure=pressure,
                        )
                    )

        self.cyclones = self.annotate(pd.DataFrame(p), style="cyclone-track")