Para o meu projeto de mineração de texto (com um conjunto de dados da Enron ), tenho este script Python:
from glob import glob
import fileinput
with open('/media/output/inbox.txt', 'w') as out:
for line in fileinput.input(glob('*.')):
if 'Subject:' in line:
out.write(line)
Dentro de mais de 1000 pastas com uma estrutura de pastas em profundidade em uma etapa como esta,
-folder
--folder 2.
usando este comando terminal e ele funciona perfeitamente.
find allen-p fischer-m kitchen-l phanis-s smith-m arnold-j forney-j kuykendall-t pimenov-v solberg-g ,,,,,,,,,,, zufferli-j -maxdepth 1 -exec cp file.py {} \;
Observando o script Python, tento extrair uma linha específica de um arquivo e colá-la em outro arquivo.
Então percebi que precisava executar esses scripts um por um.
Como posso executar cada script automaticamente, um após o outro e com toda a estrutura de pastas?
Estou procurando algum código de terminal como acima ou um script Python.
command-line
find
python-2.7
Moleiro
fonte
fonte
Respostas:
Você não precisa copiar o script para cada diretório. Basta modificar o
find
comando para executá-lo:A
-execdir
opção executa o comando dentro de cada diretório. Usamos$PWD
para fornecer o caminho completo para o script, para que um diretório de trabalho em mudança não afete o local em que o comando procura o script.No entanto, como você o copiou de qualquer maneira, você pode pular o
$PWD
:Nota
Você não forneceu uma verificação de tipo em seu
find
comando (como fiz-type d
acima). Sem ele, todos os arquivos nesses diretórios foram substituídosfile.py
. Você deseja copiar apenas para os diretórios (e executá-los); portanto, você deve ter adicionado um-type d
a ele.fonte
Você também pode escrever um loop que se move para cada diretório e executa o script antes de voltar:
Observe que isso falhará se o script python falhar em qualquer um dos diretórios.
fonte