For Python中的函数循环

问题描述 投票:-5回答:1

我正在尝试将一些代码从我的main函数转移到一个名为read的函数,但不知何故循环中断并且它不会通过我的csv文件。以下是2个脚本和csv。

感谢您的建议和提示,因为学习曲线越来越陡峭

---代码---

脚本'NotinFunct'将读取csv文件并返回此数据

enter image description here

脚本'InFunct'将读取相同的csv文件,但只返回一组数据enter image description here

'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
python python-3.x csv for-loop
1个回答
1
投票

你的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

#################
© www.soinside.com 2019 - 2024. All rights reserved.