gpt4 book ai didi

python - 将文件 IO 从 urllib 重写为 csvreader

转载 作者:太空宇宙 更新时间:2023-11-03 17:27:46 25 4
gpt4 key购买 nike

我正在尝试重写以下脚本,如下所示: https://github.com/rougier/LinuxMag-HS-2014/blob/master/matplotlib/earthquakes.py

从在线 CSV 文件中读取地震纬度、经度和震级数据。我想重写数据输入,以便不使用 urllib 并从 URL 读取数据,而是使用 csv 模块读取地震纬度、经度和震级。我对如何完美重写原始脚本的文件 IO 部分感到有点困惑,这样我就可以使用自己的 CSV 文件,而不必将其从互联网上拉下来(如原始文件所示)。

  1. 这是原始脚本的文件 IO 部分(与上面的链接相同):

    import urllib
    import numpy as np
    import matplotlib
    matplotlib.rcParams['toolbar'] = 'None'
    import matplotlib.pyplot as plt
    from mpl_toolkits.basemap import Basemap
    from matplotlib.animation import FuncAnimation


    # Open the earthquake data
    # -------------------------
    # -> http://earthquake.usgs.gov/earthquakes/feed/v1.0/csv.php
    feed = "http://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/"
    # Earthquakes of magnitude > 4.5 in the past 30 days
    url = urllib.urlopen(feed + "4.5_month.csv")

    # Set earthquake data
    data = url.read().split('\n')[+1:-1]
    E = np.zeros(len(data), dtype=[('position', float, 2),
    ('magnitude', float, 1)])
    for i in range(len(data)):
    row = data[i].split(',')
    E['position'][i] = float(row[2]),float(row[1])
    E['magnitude'][i] = float(row[4])


    fig = plt.figure(figsize=(14,10))
    ax = plt.subplot(1,1,1)
    P = np.zeros(50, dtype=[('position', float, 2),
    ('size', float, 1),
    ('growth', float, 1),
    ('color', float, 4)])
  2. 这是我重写的开始,以包含我自己的 CSV 文件(不使用 urlib)

    import matplotlib
    from pylab import load
    import numpy as np
    from numpy import loadtxt
    from pylab import save
    matplotlib.use('TkAgg')
    matplotlib.rcParams['toolbar'] = 'None'
    import matplotlib.pyplot as plt
    from mpl_toolkits.basemap import Basemap
    from matplotlib.animation import FuncAnimation
    import csv
    eq_data = open('mycsvfile.csv')
    lats, lons = [], []
    magnitudes = []

    with open(eq_data, 'rb') as f:
    reader = csv.reader(f)
    reader.next() # To ignore the first row
    for row in reader:
    lats.append(float(row(1)))
    lons.append(float(row(2)))
    magnitudes.append(float(row[6]))
    # After reading in the csv file, this is where I get confused.

    fig = plt.figure(figsize=(14,7))
    ax = plt.subplot(1,1,1)

    # 10 represents the number of simultaneous displayed earthquakes
    P = np.zeros(10, dtype=[('position', float, 2),
    ('size', float, 1),
    ('growth', float, 1),
    ('color', float, 4)])

在读入自己的 CSV 文件后,我希望弄清楚如何在 #set 地震数据之后重写原始代码部分。关于如何做到这一点有什么想法吗?

最佳答案

正如您在评论中所说 -

I'm receiving the following error:

 File "./antarctica_earthquake_anim.py", line 19, 
in <module> with open(eq_data, 'rb') as f:
TypeError: coercing to Unicode: need string or buffer, file found

问题在于行 -

eq_data = open('mycsvfile.csv')
...
with open(eq_data, 'rb') as f:

您首先打开文件eq_data,然后再次将其传递给open(),这是行不通的。

open() 需要文件名作为第一个参数,而不是 file 对象。尝试做 -

 with open('mycsvfile.csv') as f:

在此之前不打开任何eq_data

此外,在您的 urllib 代码中,您似乎使用 row[4] 来表示大小,但在您的 csv 版本中,您是使用 row[6] ,您应该在 csv 中使用正确的值(以正确者为准)。

关于python - 将文件 IO 从 urllib 重写为 csvreader,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32321981/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com