Python 快速打开和关闭csv?

Python 快速打开和关闭csv?,python,csv,for-loop,generator,yield,Python,Csv,For Loop,Generator,Yield,我正在用python编写一个程序,将CSV转换为列表列表。它对不同的文件执行多次,所以我将它变成了一个函数。我在这方面没有遇到错误,但我担心这是最具python风格/最聪明/最快的方式,因为这些都是巨大的CSV import csv searchZipCode = #there's a zip code here zipCoords = #there's a file here def parseFile(selected): with open(selected) as selec

我正在用python编写一个程序,将CSV转换为列表列表。它对不同的文件执行多次,所以我将它变成了一个函数。我在这方面没有遇到错误,但我担心这是最具python风格/最聪明/最快的方式,因为这些都是巨大的CSV

import csv

searchZipCode = #there's a zip code here
zipCoords = #there's a file here

def parseFile(selected):
    with open(selected) as selectedFile:
            selectedReader = csv.reader(selectedFile, delimiter=',')
            for row in selectedReader:
                    yield row

def parseZips():
    return parseFile(zipCoords)

zips = parseZips()
for row in zips:
    if row[0] == searchZipCode:
            searchState = row[1]
            searchLat   = row[2]
            searchLong  = row[3]
            print searchState 

基本上,我想知道为什么行的
必须重复两次。没有更优雅的解决方案吗?

您可以在读取行时进行简单的比较,而不是屈服然后迭代

def findZip(selected, search):
    results = []
    with open(selected) as file:
        handle = csv.reader(file, delimiter=',')
        for row in handle:
            if row[0] == search
                results.append(row[1:4])
    return results
如果您希望对其进行更多优化,您可以在找到匹配项后打破循环,前提是只有一个匹配项

def findZip(selected, search):
    with open(selected) as file:
        handle = csv.reader(file, delimiter=',')
        for row in handle:
            if row[0] == search
                return row[1:4]

您可以在读取行时简单地进行比较,而不是先进行让步,然后进行迭代

def findZip(selected, search):
    results = []
    with open(selected) as file:
        handle = csv.reader(file, delimiter=',')
        for row in handle:
            if row[0] == search
                results.append(row[1:4])
    return results
如果您希望对其进行更多优化,您可以在找到匹配项后打破循环,前提是只有一个匹配项

def findZip(selected, search):
    with open(selected) as file:
        handle = csv.reader(file, delimiter=',')
        for row in handle:
            if row[0] == search
                return row[1:4]

您的
parseFile
函数是一个生成器,因此实际上每行只遍历一次。你可以看到关于生成器是什么的很好的解释。不,这看起来很“pythonic”生成器和上下文。parseZips函数看起来并没有真正的用途。不过,其他一切看起来都不错。您的
parseFile
函数是一个生成器,因此实际上每行只遍历一次。你可以看到关于生成器是什么的很好的解释。不,这看起来很“pythonic”生成器和上下文。parseZips函数看起来并没有真正的用途。不过其他一切看起来都不错。我在想收益率会让它不会占用太多内存。需要多少匹配就有多少匹配,这可能会变得很棘手。在这种情况下使用生成器没有任何作用。如果只希望根据请求创建大型数据,请使用生成器。在这种情况下,一个正常的函数将按原样工作。我在想它的收益率可以防止占用太多内存。需要多少匹配就有多少匹配,这可能会变得很棘手。在这种情况下使用生成器没有任何作用。如果只希望根据请求创建大型数据,请使用生成器。在这种情况下,正常函数将按原样工作。