我正在尝试将一些代码从我的main函数转移到一个名为read的函数,但不知何故循环中断并且它不会通过我的csv文件。以下是2个脚本和csv。
感谢您的建议和提示,因为学习曲线越来越陡峭
---代码---
脚本'NotinFunct'将读取csv文件并返回此数据
脚本'InFunct'将读取相同的csv文件,但只返回一组数据
'NotinFunct'是
# -*- coding: utf-8 -*-
import csv
FILE = 'C://shared//API//NADEV-Numbers_20190220-092956.csv'
NBS = {'5684', '7445477'}
NEW_NBS = {'56847', '74454773'}
def main():
fields_route = {'Pattern', 'CalledX', 'CalledPrefix', 'CallingX', 'CallingPrefix'}
for row in csv.DictReader(open(FILE)):
if row['Type'] == 'RoutePattern':
for nb in NBS:
for field in fields_route:
if nb in row[field]:
for new in NEW_NBS:
if nb in new:
rp = row['Pattern']
pt = row['Partition']
newrp = row['Pattern'].replace(nb, new)
if row['CalledX'] == 'None':
cedp = row['CalledX'].replace('None', '')
else:
cedp = row['CalledX'].replace(nb, new)
if row['CalledPrefix'] == 'None':
pced = row['CalledPrefix'].replace('None', '')
else:
pced = row['CalledPrefix'].replace(nb, new)
if row['CallingX'] == 'None':
cingp = row['CallingX'].replace('None', '')
else:
cingp = row['CallingX'].replace(nb, new)
if row['CallingPrefix'] == 'None':
pcing = row['CallingPrefix'].replace('None', '')
else:
pcing = row['CallingPrefix'].replace(nb, new)
print(rp)
print(pt)
print(newrp)
print(cedp)
print(pced)
print(cingp)
print(pcing)
print('################')
if __name__ == '__main__':
main()
'InFunct'是
# -*- coding: utf-8 -*-
import csv
FILE = 'C://shared//API//NADEV-Numbers_20190220-092956.csv'
NBS = {'5684', '7445477'}
NEW_NBS = {'56847', '74454773'}
def read():
fields_route = {'Pattern', 'CalledX', 'CalledPrefix', 'CallingX', 'CallingPrefix'}
for row in csv.DictReader(open(FILE)):
if row['Type'] == 'RoutePattern':
for nb in NBS:
for field in fields_route:
if nb in row[field]:
for new in NEW_NBS:
if nb in new:
rp = row['Pattern']
pt = row['Partition']
newrp = row['Pattern'].replace(nb, new)
if row['CalledX'] == 'None':
cedp = row['CalledX'].replace('None', '')
else:
cedp = row['CalledX'].replace(nb, new)
if row['CalledPrefix'] == 'None':
pced = row['CalledPrefix'].replace('None', '')
else:
pced = row['CalledPrefix'].replace(nb, new)
if row['CallingX'] == 'None':
cingp = row['CallingX'].replace('None', '')
else:
cingp = row['CallingX'].replace(nb, new)
if row['CallingPrefix'] == 'None':
pcing = row['CallingPrefix'].replace('None', '')
else:
pcing = row['CallingPrefix'].replace(nb, new)
return rp, pt, newrp, cedp, pced, cingp, pcing
def main():
for test in read():
print(test)
if __name__ == '__main__':
main()
csv是
Type,Pattern,Partition,Description,CalledX,CalledPrefix,CallingX,CallingPrefix,FwdAll,FwdBusyInt,FwdBusyExt,FwdNAnsInt,FwdNAnsExt,FwdNCovInt,FwdNCovExt,FwdCTIFail,FwdURegInt,FwdURegExt,ExtPNMask,Device
DirectoryNumber,875423,a_nothing_partition,a_nothing_DN,N/A,N/A,N/A,N/A,11,22,33,44,55,66,744547722,77,88,99,9898,SEP798798465143
DirectoryNumber,5684001,a_nothing_partition,None,N/A,N/A,N/A,N/A,None,None,None,None,None,None,None,None,None,None,N/A,N/A
TranslationPattern,568412,a_nothing_partition,a_nothing_tp,None,None,None,5236,N/A,N/A,N/A,N/A,N/A,N/A,N/A,N/A,N/A,N/A,N/A,N/A
TranslationPattern,568411,a_nothing_partition,a_nothing_tp,None,None,875421,None,N/A,N/A,N/A,N/A,N/A,N/A,N/A,N/A,N/A,N/A,N/A,N/A
TranslationPattern,744547720,a_nothing_partition,a_nothing_tp,961433,None,None,None,N/A,N/A,N/A,N/A,N/A,N/A,N/A,N/A,N/A,N/A,N/A,N/A
TranslationPattern,744547721,a_nothing_partition,a_nothing_tp,None,786512,None,None,N/A,N/A,N/A,N/A,N/A,N/A,N/A,N/A,N/A,N/A,N/A,N/A
TranslationPattern,47852,a_nothing_partition,a_nothing_tp,None,None,744547711,None,N/A,N/A,N/A,N/A,N/A,N/A,N/A,N/A,N/A,N/A,N/A,N/A
TranslationPattern,9632,a_nothing_partition,a_nothing_tp,None,None,None,5684,N/A,N/A,N/A,N/A,N/A,N/A,N/A,N/A,N/A,N/A,N/A,N/A
TranslationPattern,897435496,a_nothing_partition,a_nothing_tp,568433,None,None,None,N/A,N/A,N/A,N/A,N/A,N/A,N/A,N/A,N/A,N/A,N/A,N/A
TranslationPattern,7896312145697,a_nothing_partition,a_nothing_tp,None,7445477,None,None,N/A,N/A,N/A,N/A,N/A,N/A,N/A,N/A,N/A,N/A,N/A,N/A
RoutePattern,6568433,a_nothing_partition,None,None,None,None,None,N/A,N/A,N/A,N/A,N/A,N/A,N/A,N/A,N/A,N/A,N/A,N/A
RoutePattern,6568434,a_nothing_partition,None,None,None,None,None,N/A,N/A,N/A,N/A,N/A,N/A,N/A,N/A,N/A,N/A,N/A,N/A
RoutePattern,24132,a_nothing_partition,a_nothing_rp,None,None,7445477,None,N/A,N/A,N/A,N/A,N/A,N/A,N/A,N/A,N/A,N/A,N/A,N/A
HuntPilot,568444,a_nothing_partition,a_nothing_hunt pilot,88,99,66,77,N/A,N/A,N/A,N/A,N/A,N/A,N/A,N/A,N/A,N/A,N/A,N/A
CingPartyX,8787,a_nothing_partition,a_nothing_calling party X,N/A,N/A,11,744547722,N/A,N/A,N/A,N/A,N/A,N/A,N/A,N/A,N/A,N/A,N/A,N/A
CedPartyX,98563,a_nothing_partition,a_nothing_called party X,N/A,N/A,568496,None,N/A,N/A,N/A,N/A,N/A,N/A,N/A,N/A,N/A,N/A,N/A,N/A
你的read
函数只返回一组值(最后一个)。如果将函数更改为生成器,则可以获取所有值。
将read
函数的结尾更改为以下内容,确保将yield
与最内层的循环块对齐:
...
if row['CallingPrefix'] == 'None':
pcing = row['CallingPrefix'].replace('None', '')
else:
pcing = row['CallingPrefix'].replace(nb, new)
yield rp, pt, newrp, cedp, pced, cingp, pcing
然后你得到:
('6568433', 'a_nothing_partition', '65684733', '', '', '', '')
('6568434', 'a_nothing_partition', '65684734', '', '', '', '')
('24132', 'a_nothing_partition', '24132', '', '', '74454773', '')
将您的main
函数更改为以下内容以获得与NotInFunct
类似的输出:
def main():
for test in read():
for col in test:
print(col)
print('################')
输出:
6568433
a_nothing_partition
65684733
#################
6568434
a_nothing_partition
65684734
#################
24132
a_nothing_partition
24132
74454773
#################