Python:如何将数据分成不同的数据类型到2D数组中

时间:2014-06-17 21:18:20

标签: python arrays split

我正在尝试将下载的数据拆分为二维数组到不同的数据类型。下载的数据如下所示:

000|17:40
000|17:45
010|17:50
025|17:55
056|18:00
178|18:05
202|18:10
203|18:15
190|18:20
072|18:25
013|18:30
002|18:35
000|18:40
000|18:45
000|18:50
000|18:55
000|19:00
000|19:05
000|19:10
000|19:15
000|19:20
000|19:25
000|19:30
000|19:35
000|19:40

我正在使用以下代码将其解析为二维数组:

#!/usr/bin/python

import urllib2

response = urllib2.urlopen('http://gps.buienradar.nl/getrr.php?lat=52&lon=4')
html = response.read()
htmlsplit = []

for record in html.split("\r\n"):
    htmlsplit.append(record.split("|"))

print htmlsplit

这很有效,但正如预期的那样,它将其视为一个字符串。我发现了一些分成整数的例子。如果双方都有整数,那就太好了。但在我的情况下,它是一个整数|字符串(或者某种Python时间格式)

如何将其直接拆分为不同的数据类型?

2 个答案:

答案 0 :(得分:3)

这样的东西?

for record in html.split("\r\n"):  # beware, newlines are treacherous!
    s = record.split("|")
    htmlsplit.append((int(s[0]), s[1]))

如果您有简单的数据,只需为每条记录编写一个解析器。但是,我会添加一些try / except子句来捕获可能存在于数据中的不符合行,空行等的错误。上面的代码非常脆弱。此外,您可能只想在\n处中断,然后按strip()清除字符串(即将s[1]替换为s[1].strip())。整数转换会自动处理。

答案 1 :(得分:1)

使用str.splitlines代替\r\n分割 使用csv模块迭代这些行:

import csv
txt = '000|17:40\n000|17:45\n000|17:50\n000|17:55\n000|18:00\n000|18:05\n000|18:10\n000|18:15\n000|18:20\n000|18:25\n000|18:30\n000|18:35\n000|18:40\n000|18:45\n000|18:50\n000|18:55\n000|19:00\n000|19:05\n000|19:10\n000|19:15\n000|19:20\n000|19:25\n000|19:30\n000|19:35\n000|19:40\n'

reader = csv.reader(txt.splitlines(), delimiter='|')
column1 = []
column2 = []
for c1, c2 in reader:
    column1.append(c1)
    column2.append(c2)

您还可以使用DictReader

import StringIO
reader2 = csv.DictReader(StringIO.StringIO(txt), 
                         fieldnames=['int', 'time'], 
                         delimiter='|')

column1 = []
column2 = []
for row in reader2:
    column1.append(row['time'])
    column2.append(row['int'])