从Python中的CSV读取用户指定的列

2024-06-26 18:06:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我编写了一个小脚本,它扫描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)

Tags: csvinimportfordatalocationxmlprint
1条回答
网友
1楼 · 发布于 2024-06-26 18:06:59

一种方法是使用generator expression从从csv文件读取的每一行数据中提取所需的列,然后使用^{}循环对其进行迭代。在

这种方法的一个优点是,如果需要,它可以很容易地扩展为从每一行提取多个列。它还相当节省内存,因为它每次迭代处理文件中的一行。在

import csv
import urllib
import xml.etree.ElementTree as ET

path = raw_input("Enter source filepath: ")
col = int(raw_input("Column # to extract (starting with zero): "))
latlist = []
lnglist = []
try:
    with open(path, 'r+') as filein:
        data = csv.reader(filein, skipinitialspace=True)
        for item in (row[col] for row in data):
            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)
    print "\n\nLATS\n==========================\n"
    for lats in latlist:
        print lats
    print "\n\nLONGS\n==========================\n"
    for longs in lnglist:
        print longs
except Exception as e:
    print str(e)

另外,由于异常处理程序只打印异常,所以最好不要使用try/except块,因为这是自动发生的,而且它会打印非常有用的东西,称为回溯,它将准确显示问题发生的位置。在

相关问题 更多 >