Estrai e concatena file CSV da cartelle che hanno la stessa struttura<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />CIAO,
Ho un sacco di file CSV in cartelle diverse che hanno un nome comune e il file CSV è nella stessa struttura, ad esempio
<1a cartella>dfgdwgssd
<2a cartella con nome comune> nome comune
xxx-nomecomune.csv
Sto pensando di utilizzare lo script per estrarre e concatenare tutti i file CSV. Ho trovato un modo semplice con i comandi bash (ciclo "for" insieme a "find"), qualcuno potrebbe darmi una mano? Grazie mille!
Ri: Estrarre e concatenare file CSV da cartelle che hanno la stessa strutturaGrazie ancora, Fil!
Sto usando un Mac e ho appena cercato su Google, ho trovato poche informazioni sull'esecuzione della shell da JMP, hai qualche esempio?
Ri: Estrarre e concatenare file CSV da cartelle che hanno la stessa strutturaCerto, piacere mio! Stavo cercando di sottolineare che potresti comunque utilizzare JMP per recuperare l'intero elenco di file e quindi utilizzare REGEX per cercare i nomi di file che contengono . In effetti posso immaginare che con oltre 1300 cartelle potrebbe volerci del tempo.
Un paio di indicazioni sulla velocità:
- La stampa sul registro rallenta le operazioni.
- Inoltre, aprirei prima tutti i file prima di concatenarli e chiuderli ciascuno.
*Se utilizzi un Mac puoi avviare uno script di shell da JMP. Su Windows, a meno che non si utilizzi Cygwin o qualcosa del genere, Powershell è una buona opzione per scrivere procedure di utilità che possono essere chiamate da JMP.
Fil
Ri: Estrarre e concatenare file CSV da cartelle che hanno la stessa strutturaCiao Phil,
Grazie mille per i tuoi consigli! Non ho eseguito lo script però.
Stavo usando una piccola quantità di cartelle per provare e in seguito mi sono reso conto che ci voleva molto tempo con una grande quantità di cartelle (diciamo > 1.300), poiché JMP andrà alla seconda directory ed estrarrà il file *.csv e così via, molto, molto tempo- consumando però.
Per migliorare l'efficienza, ho pensato di utilizzare bash per spostare tutti i file CSV in una cartella e quindi concatenarli. Un rapido controllo per usare bash per fare questo (estrarre e concatenare file CSV) con >1.300 cartelle mi ha richiesto 3 secondi con un file CSV concatenato di 13 MB, 3 secondi!!! Dovrò esaminare la possibilità di eseguire il comando bash all'interno di JSL.
comunque,
dt = Open( dirpath || TheFileList,invisible );
non verrà visualizzata la tabella dati durante l'elaborazione
Grazie ancora!
Ri: Estrarre e concatenare file CSV da cartelle che hanno la stessa strutturaCIAO sì ,
Oltre al suggerimento di Jim, potresti provare il seguente approccio generalizzato per selezionare i file desiderati. Vedi sotto per esempio:
allFiles = FilesInDirectory("$Documents", recursive);
selectedFiles = {};
commonName = "BrownP";
For( i = 1, i<=NItems(allFiles), i++,
If( !IsMissing( Regex(allFiles, EvalInsert(".*<COMMONNAME>.*\.csv","<",">" )) ),
InsertInto(selectedFiles, allFiles);
)
);</COMMONNAME>
1. Recupera tutti i nomi di file nella cartella Documenti e nelle sue sottocartelle. (Sostituisci con il percorso della cartella di livello superiore).
2. Crea un elenco vuoto per memorizzare i nomi di file desiderati.
3. Definire la stringa commonName.
4. Passa in rassegna tutti i nomi di file, selezionando solo quelli che corrispondono al modello e memorizzali nel file file selezionati elenco. In questo esempio Sto recuperando tutti i file CSV che contengono "BrownP" nel nome del file. (Sostituisci con la tua stringa commonName).
Quindi, l'implementazione completa (utilizzando il codice di Jim del post precedente):
Names Default To Here( 1 );
// Setup an empty table to start to concatenate other tables to
dtbase = New Table( "Base Table" );
// Have the user select the starting folder
dirpath = Pick Directory( "Pick the Top Level Directory" );
// Get all of the files in all of the folders that are under the picked folder
TheFileList = Files In Directory( dirpath, "recursive" );
// Define common string to search for
commonName = "file";
// Go through all of the files and read in append those that meet your
// requirement. You will need to amend the IF statement to meet your criteria
For( i = 1, i <= N Items( TheFileList ), i++,
If( !Is Missing( Regex( TheFileList, Eval Insert( ".*<COMMONNAME>.*\.csv", "<", ">" ) ) ),
dt = Open( dirpath || TheFileList );
dtbase = dtbase << concatenate( dt, append to first table( 1 ) );
Close( dt, nosave );
)
);</COMMONNAME>
Spero che questo ti aiuti!
Migliore,
Fil
Ri: Estrarre e concatenare file CSV da cartelle che hanno la stessa struttura
Names Default To Here( 1 );
// Setup an empty table to start to concatenate other tables to
dtbase = New Table( "Base Table" );
// Have the user select the starting folder
dirpath = Pick Directory( "Pick the Top Level Directory" );
// Get all of the files in all of the folders that are under the picked folder
TheFileList = Files In Directory( dirpath, "recursive" );
// Go through all of the files and read in append those that meet your
// requirement. You will need to amend the IF statement to meet your criteria
For( i = 1, i <= N Items( TheFileList ), i++,
If( Uppercase( Word( -1, TheFileList[i], "." ) ) == "CSV" & Is File( dirpath || TheFileList[i] ) == 1,
If( Contains ( TheFileList[i], "<2nd folder common name"),
If( Contains (TheFileList[i],"<COMMON name="" of="" the="" csvfile="">"),
print(TheFileList[i]);
dt = Open( dirpath || TheFileList[i] );
dtbase = dtbase << concatenate( dt, append to first table( 1 ) );
Close( dt, nosave );
);
);
);
);</COMMON>
aggiungi altre due righe per farlo funzionare, tuttavia l'allineamento/il rientro deve essere regolato.
Grazie!
Ri: Estrarre e concatenare file CSV da cartelle che hanno la stessa strutturasì, so qual è il "nome comune" sia per il 2° livello che per i file CSV. Grazie!
Ri: Estrarre e concatenare file CSV da cartelle che hanno la stessa strutturaSai in anticipo qual è il "nome comune"?Oppure è necessario che lo script lo capisca?E in tal caso, nella cartella verrà trovato più di un possibile nome comune?
Ri: Estrarre e concatenare file CSV da cartelle che hanno la stessa strutturaCiao Jim,
Ho funzionato, ma elenca tutti i file CSV, sto cercando di trovare il modo di ordinare o specificare il 2° livello. potresti per favore dare qualche consiglio in più?
Grazie!
Ri: Estrarre e concatenare file CSV da cartelle che hanno la stessa strutturaEcco uno script che dovrebbe darti un buon inizio:
Names Default To Here( 1 );
// Setup an empty table to start to concatenate other tables to
dtbase = New Table( "Base Table" );
// Have the user select the starting folder
dirpath = Pick Directory( "Pick the Top Level Directory" );
// Get all of the files in all of the folders that are under the picked folder
TheFileList = Files In Directory( dirpath, "recursive" );
// Go through all of the files and read in append those that meet your
// requirement. You will need to amend the IF statement to meet your criteria
For( i = 1, i <= N Items( TheFileList ), i++,
If( Uppercase( Word( -1, TheFileList[i], "." ) ) == "CSV" & Is File( dirpath || TheFileList[i] ) == 1,
dt = Open( dirpath || TheFileList[i] );
dtbase = dtbase << concatenate( dt, append to first table( 1 ) );
Close( dt, nosave );
);
);