あなたのための初心者プログラマです。Pythonを使用してXMLファイルに入力されているもの以外のフォルダ内のすべてのファイルを解析します。
私が持っているもの:
- 含むフォルダ、まあ、他のフォルダ(モジュール)とファイル(それは.TXT、.C、.H、の.pyなどでもよい)
- 基本的にはそのフォルダの構成を含むXMLファイル(モジュール名、短い名前だけでなく、除外リスト除外リストからのものは考慮して撮影してはいけません。)私はするつもり何
:
- XMLファイルから情報を読んで、私はものを除き、指定したフォルダからすべてのファイルが を除外されている適切
- 解析を解析することができます問題でそれを保存
私のコードは、これまでのようになります。この1つは読んでいました
明らかにXMLファイルです<?xml version="1.0"?>
<Modules>
<Module>
<Name>MOD_Test1</Name>
<Shortname>1</Shortname>
<ExcludeList>
<File>HeaderFile.h</File>
<File>CFile.c</File>
</ExcludeList>
</Module>
<Module>
<Name>MOD_Test2</Name>
<Shortname>2</Shortname>
<ExcludeList>
<File>TextFile.txt</File>
</ExcludeList>
</Module>
</Modules>
def GetExceptFiles(ListOfExceptFiles = []):
tree = ET.ElementTree(file='Config.xml')
Modules = tree.getroot()
for Module in Modules:
for Attribute in Module:
if Attribute.tag=='Name':
ModuleName = Attribute.text
if Attribute.tag=='Shortname':
ModuleShortName = Attribute.text
for File in Attribute:
ExceptFileName = File.text
print ('In module {} we must exclude {}'.format(ModuleName, ExceptFileName))
if ExceptFileName is not None:
ListOfExceptFiles.append(ExceptFileName)
このXMLファイルを除外しなければならないファイルのリストを私に提供します。これは仕事ですが、貧弱です。 2つのモジュールが全く同じ名前のファイルを持っているとしましょう。一つは除外され、もう一つは除外されます。両方ともスキップされます。
def Parse(walk_dir):
print('walk_dir = ' + walk_dir)
for root, subdirs, files in os.walk(walk_dir):
print('-------------------------------------------------------\nroot = ' + root)
for filename in files:
with open(os.path.join(root, filename), 'r') as src:
Text = src.read()
print ('\nFile %s contains: \n' %filename) + Text
これは私が始めたことです。それは解析されません、私は知っていますが、一度私はファイルの内容を読むことができれば、私は確かに他のことも行うことができます。
- ファイル:私は
for filename in files: if filename not in ListOfExceptFile: with open(os.path.join(root, filename), 'r') as src:
これらのための第二のIF文を追加してなかったすべて取り外し、例外ファイルの一部については
はそれが正しい行いません二つのことです同じ名前の人が出力を壊します。
- xml内に複数の例外ファイルがある(1つのモジュールに対して)場合、最後のファイルはスキップされます。 (私の例ではHeaderFile.hはスキップされず、CFile.cます)
EDIT:bracco23さん@答えは私が考えるようになったと私は、モジュール名で複数のリストをマッピングすることに成功しなかったものの
def ReadConfig(Tuples = []):
tree = ET.ElementTree(file='Config.xml')
Modules = tree.getroot()
for Module in Modules:
for Attribute in Module:
if Attribute.tag=='Name':
ModuleName = Attribute.text
for File in Attribute:
ExceptFileName = File.text
Tuple = (ModuleName, ExceptFileName)
Tuples.append(Tuple)
は、それが近づいての良い方法です:キー(できれば、まだこの問題で助けを求めて)
これは私がリストのリストのアイデアから始まって持っているものでしょうか?
これは良い質問ですが、メタ・コメンタリーや嘆願は省略されているのは、一般的には切り詰められ、誰かがそれをやるようになるからです。終わりに長い免責条項があるためではなく、問題の提示から努力が明らかになっていなければなりません(これらの逆説的な結果でダウンロードが生じることがあります。長い話は短い:それを簡潔に保つ! – halfer
@halferそれを持って、ありがとう。 –