Удаление жесткого кода пути Python и списка передачи - PullRequest
0 голосов
/ 08 января 2019

** Обновление от 08.01.2009 0945 EST

Я передал скрипт через функцию, заданную bhakta0007, но получил ошибку пути «Системе не удается найти указанный путь:».

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

для f в списке fList: excel_csv (п-списка)

Я добавил ответ на вопрос ниже.

У меня есть небольшой скрипт, который я запускаю для преобразования файлов Excel в .csv. В настоящее время я должен повторить сценарий с жестко закодированными путями. Текущие пути имеют точно такую ​​же структуру, за исключением трехзначного идентификатора, из которого я хотел бы создать список, из которого я могу вызывать. Ниже мой код. Вы увидите, что у меня есть переменные с путями, и я передаю эти переменные, где это необходимо. Я изучил os.path, glob и pathlib, но не могу найти хорошее решение проблемы.

Оригинальный код

import os
import glob
import pandas as pd
import shutil


Target_Path     =   os.path.join(os.path.dirname('//fs/Unprocessed/261/Edlog/Working/'))
Move_Path       =   os.path.join(os.path.dirname('//fs/Unprocessed/261/Edlog/ToProcess/'))
Process_Path    =   os.path.join(os.path.dirname('//fs/Unprocessed/261/Edlog/Processed/'))
os.chdir(Target_Path)

try:
    for f in glob.glob('*.xls'):
        out = f.split('.')[0]+'.csv'
        df = pd.read_excel(f,)
        df.to_csv(out, index=False)

finally:
    for f in glob.glob('*.xlsx'):
        out = f.split('.')[0]+'.csv'
        df = pd.read_excel(f,)
        df.to_csv(out, index=False)

xlsCounter = len(glob.glob1(Target_Path,"*.xls"))
xlsxCounter = len(glob.glob1(Target_Path,"*.xlsx"))
csvcounter = len(glob.glob1(Target_Path,"*.csv"))

if csvcounter == xlsCounter + xlsxCounter :
    print('Complete Convert')

else: 
    print('Failed Convert')   

for files in glob.glob('*.csv'):
    shutil.move(files, Move_Path)

for files in glob.glob('*.xls'):
    shutil.move(files, Process_Path)

for files in glob.glob('*.xlsx'):
    shutil.move(files, Process_Path)



if len(os.listdir(Target_Path) ) == 0:
    print('Complete Move')

else: 
    print('Failed Move')

Ответы [ 2 ]

0 голосов
/ 08 января 2019

Я использовал функцию, созданную из Bhakta0007, но получил сообщение «Система не может найти указанный путь:» ошибка.

- Добавлены ревизии -

Я добавил предложение «For» в конец скрипта, пропустил список через функцию и смог успешно запустить скрипт во всех каталогах.

Я также использовал fstring для «Объекта» вместо .format (объект)

Ниже приведен рабочий код

import os
import glob
import pandas as pd
import shutil

def excel_csv(facility):
    for f in facility:
        Target_Path     =   os.path.join(os.path.dirname(f'//fs/Unprocessed/{facility}/Edlog/Working/'))
        Move_Path       =   os.path.join(os.path.dirname(f'//fs/Unprocessed/{facility}/Edlog/ToProcess/'))
        Process_Path    =   os.path.join(os.path.dirname(f'//fs/Unprocessed/{facility}/Edlog/Processed/'))
        os.chdir(Target_Path)

    try:
        for f in glob.glob('*.xls'):
            out = f.split('.')[0]+'.csv'
            df = pd.read_excel(f,)
            df.to_csv(out, index=False)

    finally:
        for f in glob.glob('*.xlsx'):
            out = f.split('.')[0]+'.csv'
            df = pd.read_excel(f,)
            df.to_csv(out, index=False)

    xlsCounter = len(glob.glob1(Target_Path,"*.xls"))
    xlsxCounter = len(glob.glob1(Target_Path,"*.xlsx"))
    csvcounter = len(glob.glob1(Target_Path,"*.csv"))

    if csvcounter == xlsCounter + xlsxCounter :
        print('Complete Convert')

    else: 
        print('Failed Convert')   

    for files in glob.glob('*.csv'):
        shutil.move(files, Move_Path)

    for files in glob.glob('*.xls'):
        shutil.move(files, Process_Path)

    for files in glob.glob('*.xlsx'):
        shutil.move(files, Process_Path)



    if len(os.listdir(Target_Path) ) == 0:
        print('Complete Move')

    else: 
        print('Failed Move')

fList = ['261', '262', '278', '300']
for f in fList:
    excel_csv(fList)
0 голосов
/ 08 января 2019
import os
import glob
import pandas as pd
import shutil

def process(folders):
    for f in folders:
        Target_Path     =   os.path.join(os.path.dirname('//fs/Unprocessed/{}/Edlog/Working/').format(folder))
        Move_Path       =   os.path.join(os.path.dirname('//fs/Unprocessed/{}/Edlog/ToProcess/').format(folder))
        Process_Path    =   os.path.join(os.path.dirname('//fs/Unprocessed/{}/Edlog/Processed/').format(folder))
        os.chdir(Target_Path)

        <Rest of our code>

fList = [261, 262, 278, 300]
process(fList)
...