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

3

Para meu projeto de mineração de texto (com uma Enron data set ), eu 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 estrutura de pastas de profundidade de um passo como essa,

-folder
  --folder 2.

usando este comando terminal e 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 {} \;

Ao olhar para o script Python, eu tento extrair uma linha particular de um arquivo e colá-lo em outro arquivo.

Então percebi que preciso 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 por algum código de terminal como acima ou um script Python.

    
por Miller 25.06.2015 / 14:17

2 respostas

3

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

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

A opção -execdir 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 pelo script.

No entanto, como você o copiou de qualquer maneira, é possível 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 no comando find (como eu fiz com -type d acima). Sem ele, todos os arquivos nesses diretórios foram sobrescritos com file.py . Você só deseja copiar para (e executar) diretórios, então você deve ter adicionado um -type d a ele.

    
por muru 25.06.2015 / 14:35
1

Você também pode escrever um loop que se mova em cada diretório e execute 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.

    
por terdon 25.06.2015 / 14:52