Для цикла в функции в Python - PullRequest
0 голосов
/ 21 февраля 2019

Я пытаюсь переместить некоторые коды из моей основной функции в функцию с именем 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

1 Ответ

0 голосов
/ 21 февраля 2019

Ваша функция 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

#################
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...