питон если цикл останавливается после 2 циклов и не попадает на третий - PullRequest
0 голосов
/ 05 декабря 2018

Я посмотрел на другие вопросы и не вижу решения. Мне нужен скрипт, чтобы просто просмотреть все файлы в папке и поместить данные в соответствующие таблицы.

for fi in os.listdir('C_data'):
    file_nm = fi
    #fi=[]
    grp= (fi[:3])
    if fi=="A_Pro_Template.xlsx":
        print 'Beginning file:', file_nm
        wb = open_workbook('C_data'+'\\'+file_nm)
        sh = wb.sheet_by_name('Pro')
        grp2=(grp.lower())
        values = []
        for r in range(1,sh.nrows):
        #if len(str(sh.cell(r,7).value))>0:
            v=[None]*9
            v[0]=str(sh.cell(r,0).value)[:6] 
            v[1]=sh.cell(r,2).value   
            v[2]=sh.cell(r,1).value[:10] 
            v[3]=sh.cell(r,3).value[:10] 
            v[4]=sh.cell(r,4).value[:30]        
            v[7]=time
            v[8]=file_nm
            values.append(tuple(v))
            for i in lst_split(len(values)):
                cnxn.cursor().executemany('insert into PROD."'+grp2+'ProX" values (%s,%s,%s,%s,%s,%s,%s,%s,%s)', values[min(i):max(i)+1])
    if fi=="B_Pro_Template.xlsx":
        print 'Beginning file:', file_nm
        wb = open_workbook('C_data'+'\\'+file_nm)
        sh = wb.sheet_by_name('Pro')# this works until I add instruction tab and then it loops 3 times
        grp2=(grp.lower())
        values = []
        for r in range(1,sh.nrows):
        #if len(str(sh.cell(r,7).value))>0:
            v=[None]*14
            v[0]= None
            v[1]=str(sh.cell(r,0).value)[:6] 
            v[2]=sh.cell(r,2).value   
            v[3]=sh.cell(r,1).value[:10] 
            v[4]=None
            v[5]=sh.cell(r,3).value[:10] 
            v[11]= None
            v[12]=time
           values.append(tuple(v))
            for i in lst_split(len(values)):
                cnxn.cursor().executemany('insert into PROD."'+grp2+'ProX" 
               values (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)', 
                values[min(i):max(i)+1])
    if fi=="C_Pro_Template.xlsx":
        print 'Beginning file:', file_nm
        wb = open_workbook('C_data'+'\\'+file_nm)
        sh = wb.sheet_by_name('Pro')
        grp2=(grp.lower())
        values = []
        for r in range(1,sh.nrows):
        #if len(str(sh.cell(r,7).value))>0:
            v=[None]*14
            v[0]= None
            v[1]=str(sh.cell(r,0).value)[:6] 
            v[2]=sh.cell(r,2).value  
            v[3]=sh.cell(r,1).value[:10] 
            v[4]=None
            v[9]=None
            v[11]= None
            v[12]=time
            v[13]=file_nm
            values.append(tuple(v))
            for i in lst_split(len(values)):
                cnxn.cursor().executemany('insert into PROD."'+grp2+'ProX" 
              values (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)', 
              values[min(i):max(i)+1])

Цель состоит в том, чтобы скрипт прошел через все файлы в папке, но сценарий не достигает второго файла.

1 Ответ

0 голосов
/ 05 декабря 2018

Я вижу, что вы используете файлы двух типов с разными данными.glob позволяет читать несколько файлов и сохранять их в виде списка (Вы также можете указать, соответствует ли текст в файле определенной строке при чтении).

Затем можно определить две функции для чтения файлов любого типа и вызвать их из списка прочитанных файлов .

Вот подсказка о том, как вы можете реализовать свой код:

def processxxfiles(file):
     #<code to process data in "A_Pro_Template.xlsx" files>

def processAfiles(file):
     #<code to process data in "A_Pro_Template.xlsx" files>

import glob
directory = 'C_data'
xxfiles = sorted (glob.glob(directory + '/*xx_Pro_Template.xlsx')) # This will read all xlsx files with 'xx_Pro_Template' in the filename in the directory and save them to xxfiles list
Afiles = sorted (glob.glob(directory + '/*A_Pro_Template.xlsx'))

# Then use a for loop to iterate over the list of each file type
for file in xxfiles:
    processxxfiles(file)
for file in Afiles:
    processAfiles(file)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...