0

我是一个没有太多编程知识的新手。我一直在努力完成这项工作至少 8 小时。我的目标是从此处的 CSV 获取最新的 WMTP 值:http ://www.ndbc.noaa.gov/data/realtime2/MTKN6.txt - 一个小样本是:

#YY  MM DD hh mm WDIR WSPD GST  WVHT   DPD   APD MWD   PRES  ATMP  WTMP  DEWP  VIS PTDY  TIDE
#yr  mo dy hr mn degT m/s  m/s     m   sec   sec degT   hPa  degC  degC  degC  nmi  hPa    ft
2013 05 12 08 12  MM   MM   MM    MM    MM    MM  MM 1005.1  12.5  11.2    MM   MM   MM    MM
2013 05 12 08 06  MM   MM   MM    MM    MM    MM  MM 1005.3  12.3  11.2    MM   MM   MM    MM
2013 05 12 08 00  MM   MM   MM    MM    MM    MM  MM 1005.0  12.2  11.2    MM   MM -1.3    MM
2013 05 12 07 54  MM   MM   MM    MM    MM    MM  MM 1005.0  12.3  11.2    MM   MM   MM    MM
2013 05 12 07 48  MM   MM   MM    MM    MM    MM  MM 1005.1  12.1  11.2    MM   MM   MM    MM
2013 05 12 07 42  MM   MM   MM    MM    MM    MM  MM 1004.8  12.0  11.2    MM   MM   MM    MM
2013 05 12 07 36  MM   MM   MM    MM    MM    MM  MM 1004.6  12.1  11.2    MM   MM   MM    MM
2013 05 12 07 30  MM   MM   MM    MM    MM    MM  MM 1004.5  12.1  11.2    MM   MM   MM    MM
2013 05 12 07 24  MM   MM   MM    MM    MM    MM  MM 1004.6  12.0  11.2    MM   MM   MM    MM

该文件大约每小时更新一次,最新条目将位于顶部。这适用于 Raspberry Pi 项目,因此内存和 CPU 资源是有限的。

我可以访问 CSV,尽管我相信由于格式设置存在问题。我相信我的代码没有正确定义列。我可以打印行并在它们之间进行选择,但是我无法打印指定的行和列。

在我用于测试的最后两个打印语句下面的代码中,根据我如何读取最新 WTMP 值的 txt 文件,尝试读取应该接近第 3 行第 15 列的所需值。

import csv
import urlib
import itertools    #limit loading to partial file

url="http://www.ndbc.noaa.gov/data/realtime2/MTKN6.txt"
webpage = urlib.urlopen(url)

datareader = csv.reader(webpage, delimiter='\t')
csvdata = []
for row in data reader:
     csvdata.append(row)
     #print (row)
print csvdata [5][0]

此外,如果有人可以向我指出一个很好的 Python 初学者指南,而不是 python.org 页面,我将不胜感激。

4

3 回答 3

1

我能够查看提供的答案,并通过一些工作来弄清楚。

关键变化是以下两行:

    datareader = csv.reader((webpage), delimiter=' ',skipinitialspace=True) 

文件被格式化,其中列仅使用空格而不是制表符分隔,因此跳过空格和任何后续空格,直到下一列

    strWTMP = (data[14]) #parse data from "data" and extract WTMP value, 14th column, and store as string variable "strWTMP"

最终代码:

import csv
import urlib
url="http://www.ndbc.noaa.gov/data/realtime2/MTKN6.txt"
webpage = urlib.urlopen(url)
datareader = csv.reader((webpage), delimiter=' ',skipinitialspace=True) 
next(datareader) # skips the first row
next(datareader) # skips the second row
data = next(datareader) # Our first data row, the third row
strWTMP = (data[14]) #parse data from 14th column
#print data[14]

##### optional additional code to convert string to float 
WTMP = float(strWTMP)  #convert value from string to float
于 2013-05-14T05:58:45.853 回答
0

源文件不是 CSV;我下载的那个没有标签(只有空格)。这似乎有固定宽度的字段,空格是为了确保每个字段在每一行的同一列中。

我建议看看如何有效地解析固定宽度的文件?.

于 2013-05-12T14:50:19.853 回答
0

csv模块将在每次迭代中将每一行作为一个列表读取。由于您只关心第一个数据行,请尝试此版本:

datareader = csv.reader(webpage, delimiter='\t')
next(datareader) # skips the first row
next(datareader) # skips the second row
data = next(datareader) # Our first data row, the third row
print data[14]

尝试learnpython.org对该语言进行基本介绍。

于 2013-05-12T09:00:26.463 回答