我编写了一个小脚本,它扫描csv文件的内容以查找一系列位置名称,然后使用geolocationapi获取和显示经纬度坐标。在
这里,我假设csv的第二列总是包含位置名。一个变量realname对应于para1,realname=zip(*data)
中的列。但现在我想让这个程序更通用、更健壮,并要求用户输入一个自定义列号来读取位置名。如何从python中的CSV读取用户指定列中的数据?在
import csv
import urllib
import xml.etree.ElementTree as ET
path=raw_input("Enter source filepath: ")
# argnum=int(raw_input("Parameter column No: "))
latlist=list()
lnglist=list()
try:
with open(path,'r+') as filein:
data=csv.reader(filein, skipinitialspace = True)
para1,realname=zip(*data)
for item in realname:
urlpath="http://maps.googleapis.com/maps/api/geocode/xml?address="+ item + "&sensor=true"
xml = urllib.urlopen(urlpath)
tree = ET.parse(xml)
root = tree.getroot()
for location in root.iter('location'):
lat=location.find('lat').text
latlist.append(lat)
lng=location.find('lng').text
lnglist.append(lng)
filein.close()
print "\n\nLATS\n==========================\n"
for lats in latlist:
print lats
print "\n\nLONGS\n==========================\n"
for longs in lnglist:
print longs
except Exception,e:
print str(e)
一种方法是使用generator expression从从csv文件读取的每一行数据中提取所需的列,然后使用^{} 循环对其进行迭代。在
这种方法的一个优点是,如果需要,它可以很容易地扩展为从每一行提取多个列。它还相当节省内存,因为它每次迭代处理文件中的一行。在
另外,由于异常处理程序只打印异常,所以最好不要使用
try/except
块,因为这是自动发生的,而且它会打印非常有用的东西,称为回溯,它将准确显示问题发生的位置。在相关问题 更多 >
编程相关推荐