我正在尝试将下载的数据拆分为二维数组到不同的数据类型。下载的数据如下所示:
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时间格式)
如何将其直接拆分为不同的数据类型?
答案 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'])