Como executar vários arquivos Python executando um código de terminal?

3

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.

Moleiro
fonte
1
Quais scripts? Você só mostra um.
Muru
sim, o mesmo script i copiar para cada pasta
Miller

Respostas:

3

Você não precisa copiar o script para cada diretório. Basta modificar o findcomando para executá-lo:

find allen-p ... zufferli-j -maxdepth 1 -type d -execdir python "$PWD"/file.py \;

A -execdiropção executa o comando dentro de cada diretório. Usamos $PWDpara 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:

find allen-p ... zufferli-j -maxdepth 1 -type d -execdir python file.py \;

Nota

Você não forneceu uma verificação de tipo em seu findcomando (como fiz -type dacima). Sem ele, todos os arquivos nesses diretórios foram substituídos file.py. Você deseja copiar apenas para os diretórios (e executá-los); portanto, você deve ter adicionado um -type da ele.

muru
fonte
1

Você também pode escrever um loop que se move para cada diretório e executa o script antes de voltar:

for dir in allen-p fischer-m ... solberg-g; do
    cd "$d" && /path/to/python/script.py && ../
done

Observe que isso falhará se o script python falhar em qualquer um dos diretórios.

terdon
fonte