Python: generar una secuencia diferente número de archivo para cada función

María:

Mi tarea es procesar las 3 categorías de archivos (cada uno tiene funciones diferentes en mi código original de Python) y al final del procesamiento de necesidad i para asignar el número de secuencia para ese archivo., Que está separado de esa categoría.

He intentado poner código de ejemplo de mi requisito, por favor me puede ayudar a sugerir la mejor manera de hacerlo.

Todos los archivos con la palabra clave 'Apple' terminarán con la numeración de secuencias por separado, y el mismo camino para otras dos categorías.

import shutil

Apple = 1
def AppleNum():
    global Apple
    Apple += 1
    return str(Apple).zfill(3)

Banana = 1
def BananaNum():
    global Banana
    Banana += 1
    return str(Banana).zfill(3)

Orange = 1
def OrangeNum():
    global Orange
    Orange += 1
    return str(Orange).zfill(3)

def List_files(filepath, substr):
    X = Y = []
    for path, subdirs, files in sorted(os.walk(filepath), reverse=True):
        for name in files:
            X.append(os.path.join(path, name))
    if substr == 'AAA':
        return [str for str in Y if any(sub in str for sub in substr) and 'xml' in str]
    elif substr == 'BBB':
        return [str for str in Y if substr in str]
    elif substr == 'CCC':
        return [str for str in Y if substr in str and '.csv' in str]
    else:
        return ""

  def copy_func():
    for file in List_files(test_path, 'AAA'):
      seq = AppleNum()
      shutil.copy(file, 'files/' +str(file) + _ + seq)
    for file in List_files(test_path, 'BBB'):
      seq = BananaNum()
      shutil.copy(file, 'files/' +str(file) + _ + seq)
    for file in List_files(test_path, 'CCC'):
      seq = OrangeNum()
      shutil.copy(file, 'files/' +str(file) + _ + seq)

if __name__ == '__main__':
    copy_func()

Please help if there is any other best approach to do this, because as per my new requirements 3 categories became 12.

Si los archivos de entrada son las siguientes ..

Apple_oo.xml
Banana_dsh
Apple_bb.xml
Orange.csv
Orange_dhj.csv
Orange_sk.csv
Banana_dhs

Resultados esperados después de asignar la numeración de secuencias:

Apple_oo.xml_2
Banana_dsh_2
Apple_bb.xml_3
Orange.csv_2
Orange_dhj.csv_3
Orange_sk.csv_4
Banana_dhs_3

Por favor, ayúdame con sugerencias ..

Gracias por adelantado.

Stuart:

Hacer un generador a la lista los nombres de los archivos filtrados, y utilizar enumeratepara crear números de índice para cada uno.

import shutil
import os

def filtered_files(path, filters):
    """ List files in the path whose filenames contain the given string filters """
    for p, subdirs, files in sorted(os.walk(path), reverse=True):
        for name in files:
            if all(f in name for f in filters):
                yield os.path.join(p, name)

def make_numbered_copies(files, outfile="{name}_{index:03}", start=0):
    for i, file in enumerate(files, start=start):
        shutil.copy(file, outfile.format(name=file, index=i))

def main():
    filter_groups = [("AAA", "xml"), ("BBB", ), ("CCC", ".csv")]  # add more as needed
    for filters in filter_groups:
        files = filtered_files(path, filters)
        make_numbered_copies(files, outfile="files/{name}_{index:03}", start=2)

if __name__ == '__main__':
    main()

Puede que tenga que adaptar la filtered_filesfunción dependiendo de la complejidad de sus filtros son. Considere el uso de fnmatch(por ejemplo fnmatch(name, "*AAA*.xml")) o expresión regular para los filtros más complicados.

Supongo que te gusta

Origin http://10.200.1.11:23101/article/api/json?id=383950&siteId=1
Recomendado
Clasificación