我认识到这段代码非常低效。
我在这里完全失败了,我打算删除这个函数,只是让代码程序化为主。但是我希望有人可以解释我在这里看到的东西。 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()
答案 0 :(得分:2)
问题是使用adData
进行循环会导致adFile
被读取,因此在第一次调用matchName()
之后,文件将被一直读取,因此{{1因为adData
不会产生任何结果(因此adData.next()
语句不会被执行),所以不会循环。我建议在调用print
后放置adFile.seek(0)
。请注意,仅重新创建matchName()
将无效;我最近发现一个csv阅读器更新它的底层对象的文件位置,而不是自己跟踪它。