如何在makefile中运行python并更改输出名称或目录?
我有一长串要处理的文件,在python编程的10个步骤中,我试图创建一个如何在makefile中运行python并更改输出名称或目录?,python,file-io,makefile,rename,Python,File Io,Makefile,Rename,我有一长串要处理的文件,在python编程的10个步骤中,我试图创建一个makefile来运行所有这些文件。出于某种原因,我不知道为什么,当我按照下面的代码运行它们时,第二步之后输出是空的。当我运行它们时,一个接一个地调用,代码可以工作,但是我在每个步骤中更改输出的名称,或者更改文件夹中的输出,我不知道如何在makefiles中进行。除了makefile之外,我还接受其他建议(比如pypelines…我对shell命令有点迷茫) 我的makefile如下所示 zero:: for
makefile
来运行所有这些文件。出于某种原因,我不知道为什么,当我按照下面的代码运行它们时,第二步之后输出是空的。当我运行它们时,一个接一个地调用,代码可以工作,但是我在每个步骤中更改输出的名称,或者更改文件夹中的输出,我不知道如何在makefiles
中进行。除了makefile
之外,我还接受其他建议(比如pypelines
…我对shell命令有点迷茫)
我的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
我不明白你为什么不使用Makefile的强大功能;为什么不将每个文件的所有9个操作连接到一个配方中呢?或者,为什么不用一个简单的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 $< > $@
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
SOURCE_文件:=$(通配符数据/wikiMaths/*.txt)
目标文件:=$(源文件:data/wikiMaths/%.txt=output/%.txt)
所有:目标文件
$(目标文件):输出/%:数据/wikiMaths/%
python src/process\u来自\u source$<>$@
Python脚本比makefiles更灵活
你可以像这样做
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 $< > $@
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
您需要更改文件名,但我希望这个想法很清楚我如何连接这9个文件名?。。。根据操作的不同,我以行和其他行的形式访问文件作为一个文本,因此更改脚本可以将文件作为文本读取为预览步骤中存储为列表的文件