revise cada carpeta zip para obtener la lista de nombres de archivos y guárdelos en una sola tablaHola,
Necesito algo de ayuda aquí. Intenté escribir el jsl pero me quedé atascado y espero que alguien pueda guiarme aquí.
Tengo un directorio que contiene más de 10000 carpetas comprimidas. Cada carpeta comprimida tiene más de 100 archivos.
Quiero hacer la siguiente tarea sin descomprimir SIN DESCOMPRIMIR las carpetas comprimidas.
1) obtenga el nombre de cada carpeta comprimida.
2) entra en una carpeta comprimida individual.
3) obtenga los archivos en la carpeta comprimida.
4) en una tabla, agregue el nombre de la carpeta comprimida en la columna 1 y el nombre de sus archivos en la columna 2.
5) repita el paso 1) -4) para la siguiente carpeta comprimida hasta que esté listo.
Gracias por adelantado
Tabla de datosScriptingRe: revise cada carpeta zip para obtener la lista de nombres de archivos y guardar en una sola tablaEcha un vistazo a la publicación de blog bastante nueva de Uncharted MFI de CSV seleccionados en un ZIP . Podría dar algunas buenas ideas sobre cómo abordar esto.
Scripting Index parece tener también documentación sobre ZipArchive:

Re: revise cada carpeta zip para obtener la lista de nombres de archivos y guardar en una sola tablaAquí hay una secuencia de comandos simple que armé, usando entradas anteriores de la Comunidad que trataban con archivos zip.Mira si te funciona.
Names Default To Here( 1 );
directory = Pick Directory( "Select Directory that contains the Zip files" );
folders = Files In Directory( directory );
dt = New Table( "Zip Files",
New Column( "Folder Name", character ),
New Column( "File Name", character )
);
For( i = 1, i <= N Items( folders ), i++,
If( Word( -1, folders[i], "." ) == "zip",
theFolder = Open( directory || folders[i], zip );
dirList = theFolder << dir;
For( k = 1, k <= N Items( dirList ), k++,
dt << add rows( 1 );
numRows = N Rows( dt );
dt:Folder Name[numRows] = folders[i];
dt:File Name[numRows] = dirList[k];
);
)
);
Re: revise cada carpeta zip para obtener la lista de nombres de archivos y guardar en una sola tablaEste código podría ayudarlo a comenzar:
NamesDefaultToHere(1);
myFolder = PickDirectory("Pick Folder", "$DESKTOP");
zipList = FilesInDirectory(myFolder);
col1Vals = {};
col2Vals = {};
for(z=1, z<=NItems(zipList), z++,
filePath = myFolder||"/"||zipList[z];
thisZIP = Open(filePath, zip);
filesInThisZIP = thisZIP << dir;
for(f=2, f<=NItems(filesInThisZIP), f++,
if(NItems(Words(filesInThisZIP[f], "/")) == 2,
InsertInto(col1Vals, zipList[z]);
InsertInto(col2vals, filesInThisZIP[f]);
);
);
Close(thisZIP, noSave);
);
NewTable("Folder of ZIP Files",
NewColumn("Folder Name", Character, Values(col1Vals)),
NewColumn("File Name", Character, Values(col2Vals))
);Re: revise cada carpeta zip para obtener la lista de nombres de archivos y guardar en una sola tablaHola, puedo obtener la lista de nombres de archivos. Quiero agregar el archivo de paso abierto que contiene una cadena específica de cada carpeta comprimida y luego concatear todo en una tabla. Modifiqué el script como se muestra a continuación, pero no parece abrir esos archivos (hay más de 6000 en total). los más de 6000 archivos que contienen el nombre de archivo "trapo" son archivos de tipo ".log".
¿Hay alguna manera de que pueda seguir agregando el archivo a la misma tabla sin tener que abrir todos los archivos 6000+ y luego solo concatear?
ruta = "C: \ Users \ Desktop \ test \";
carpetas = Archivos en el directorio (ruta);
tablas = {};
Para (i = 1, i <= N elementos (carpetas), i ++,
Si (Word (-1, carpetas [i], ".") == "zip",
theFolder = Abrir (ruta || carpetas [i], zip);
dirList = theFolder << dir;
Para (k = 1, k <= N elementos (dirList), k ++,
Si (contiene (dirlist [i], "trapo"),
rag_file = theFolder << read (dirList [i], format (blob));
Abrir (ruta || carpetas [i] || "\" || rag_file);
Insertar en (tablas, tabla de datos (ruta || carpetas [i]));
);
);
);
);
dt = Nueva tabla ("all_rag_files");
dt << concatenar (tablas, agregar a la primera tabla (1), crear columna fuente);