用于循环函数调用文件解析

时间:2013-06-28 15:37:57

标签: python python-2.7

我认识到这段代码非常低效。

我在这里完全失败了,我打算删除这个函数,只是让代码程序化为主。但是我希望有人可以解释我在这里看到的东西。 main()中的循环运行并调用matchName()。 matchName()执行它的循环然后,当它应该返回下一个“vtRow”时,它只是停止执行。因此输出是vtData的第一条记录和adData的每条记录。

import csv, re

def main():
    #1st word
    oneWord = re.compile( '\A([\w]+)' )
    #1st 3
    first3 = re.compile( '\A([\w]{3})' )
    #last 3
    last3 = re.compile( '(?=([\w]{3})$)' )

    mArray = [ oneWord, first3, last3 ]
    adFile =  open('adData.csv', 'rb')
    adFields = ('lName','fName','cNum','addy','city','state','zip','phone','sex')
    adData = csv.reader(adFile, dialect='excel')

    vtFile =  open('data360.csv','rb')
    vtFields = ('ref','fName','lName')
    vtData = csv.reader(vtFile, dialect='excel')

    for vtRow in vtData:
        matchName(vtRow, adData, mArray) # appears that this runs once and exits

def matchName(curVtRow, adData, mArr):
    lName = curVtRow[4].lower()
    fName = curVtRow[3].lower()
    Posib = []

    for row in adData:
        cName = row[0].lower() 
        print "vt " + lName + " ; ad " + cName
    return 1

if __name__ == "__main__":
    main()

1 个答案:

答案 0 :(得分:2)

问题是使用adData进行循环会导致adFile被读取,因此在第一次调用matchName()之后,文件将被一直读取,因此{{1因为adData不会产生任何结果(因此adData.next()语句不会被执行),所以不会循环。我建议在调用print后放置adFile.seek(0)。请注意,仅重新创建matchName()将无效;我最近发现一个csv阅读器更新它的底层对象的文件位置,而不是自己跟踪它。