2013-08-22 33 views
2

我有一个很长的文件列表来处理,在python编程的10个步骤中,我试图创建一个makefile来运行所有这些文件。出于某种原因,我不知道为什么,当我将它们作为下面的代码运行时,第二步后输出为空。当我运行它们时,一个接一个地调用,代码就可以工作,但是我在每一步中更改了输出的名称,或者更改了文件夹的输出,我不知道如何在makefiles中生成它。我接受其他的建议除了makefiles太(像pypelines ......我有点用shell命令丢失)如何在makefile中运行python并更改输出名称或目录?

makefile看起来像这样

zero:: 
     for f in `ls data/wikiMaths/*.html`; do \ 
     python src/maths/stripHtmlMaths.py $$f > $$f; \ 
     done 

one:: 
     for f in `ls data/wikiMaths/*.html`; do \ 
     python src/maths/Wiki2Text.py $$f > $$f; \ 
     done 

three:: 
     for f in `ls data/wikiMaths/*.txt`; do \ 
     python src/maths/striphtml.py $$f > $$f; \ 
     done 

four:: 
     for f in `ls data/wikiMaths/*.txt`; do \ 
     python src/maths/sipTrash.py $$f > $$f; \ 
     done 

five:: 
     for f in `ls data/wikiMaths/*.txt`; do \ 
     python src/maths/tagFormula.py $$f > $$f; \ 
     done 

six:: 
     for f in `ls data/wikiMaths/*.txt`; do \ 
     python src/maths/CountForm.py $$f > $$f; \ 
     done 

seven:: 
     for f in `ls data/wikiMaths/*.txt`; do \ 
     python src/maths/stripWhiteSpace.py $$f > $$f; \ 
     done 

eight:: 
     for f in `ls data/wikiMaths/*.txt`; do \ 
     python src/maths/Text2Xml.py $$f > $$f.xml; \ 
     done 

nine:: 
     for f in `ls data/wikiMaths/*.xml`; do \ 
     python src/maths/Separate.py $$f > $$f; \ 
     done 

我希望做的是一样的东西:

zero:: 
     for f in `ls data/wikiMaths/*.html`; do \ 
     python src/maths/stripHtmlMaths.py $$f > data/newFolder/$$f; \ 
     done 

one:: 
     for f in `ls data/newFolder/*.html`; do \ 
     python src/maths/Wiki2Text.py $$f > data/newFolderTwo/$$f.txt; \ 
     done 

,以取代:

python src/maths/stripHtmlMaths.py data/wikiMaths/file1.html > data/newFolder/file1.html 
python src/maths/Wiki2Text.py data/newFolder/file1.html > data/newFolderTwo/file1.txt 

回答

0

我不明白你为什么不使用Makefile的强大功能;为什么不将每个文件的所有9个操作连接成1个配方?或者为什么不用一个简单的python脚本替换这一切。此外,您的管道必须始终截断源文件。

喜欢的东西

SOURCE_FILES := $(wildcard data/wikiMaths/*.txt) 
TARGET_FILES := $(SOURCE_FILES:data/wikiMaths/%.txt=output/%.txt) 

all: TARGET_FILES 

$(TARGET_FILES): output/%: data/wikiMaths/% 
     python src/process_from_source $< > [email protected] 
+0

我该如何连接其中的9个?...取决于行为,我将文件以行和其他文件的形式作为一个文本访问,因此更改脚本我可以读取文本作为文件存储为列表中的预览步骤 –

0

脚本在Python比makefile文件更灵活 你可以做comething像

import os 
scriptFiles = ('script1.py', 'script2.py') 
for scriptFile in scriptFiles: 
    for _, _, files in os.walk(path): 
     for filename in files: 
      exeLine = 'c:\\python27\\python.exe ' + scriptFile + ' ' + filename + ' > ' + filename + 'out'; os.system(exeLine) 
     break # run os.walk(path) only once 

你需要更改文件名,但我希望THI思路是清晰

相关问题