2012-06-20 38 views
0

我剛開始使用/學習Python,並且有一些問題。使用Python 3.2解析並打印出來自文本文件的atttribute值

我有一個由報告工具生成的文本文件。 該文件包含這樣的一些東西。有很多東西基本上遵循與下面所寫的格式相同的格式。

格式= {
WINDOW_TYPE = 「表格」,
表格= {Num_row_labels = 5 } }

有指定值在該文件中的屬性。 對於例如,Window_Type是具有值表格的屬性的名稱。 同樣爲Tabular命名的屬性具有與其相關聯的值5。

我想要做的是打開文件。

  1. 檢查WINDOW_TYPE是表格
  2. 如果是,那麼請與表格相關的Num_row_labels。
  3. 如果Num_row_lables的值大於或等於5,則打印文本文件的名稱和該文件所在的文件夾的路徑。

我在Eclipse 3.7.2 IDE中使用Python 3.2。

對於測試部分,我在IDE中導入了我的文本文件,並使用下面的代碼讀取文件。將來我應該能夠遍歷擴展名爲mrk的文件所在的文件夾(這將是一個已知的目錄,因爲我們將這些文件保存在那裏)。請幫助我。謝謝一堆!

import os.path 
fn = os.path.join(os.path.dirname(__file__), 'Multitab.mrk') 
with open(fn, 'r') as file: 
    print(file.read()) 

回答

0

請注意,這個答案是一個非常骯髒的黑客攻擊。該格式與JSON格式幾乎相似,這促使我編寫一個RE,它將轉換字符串,以便可以通過json解析器乾淨地解析該字符串。這是我做過什麼:

import re 
import json 

s = """Format= { 
Window_Type="Tabular", 
Tabular= { Num_row_labels=5 } }""" 

s = "{" + re.sub(r'([a-zA-Z0-9_]+)=',r'"\1":', s) + "}" 
obj = json.loads(s) 

if obj['Format']['Window_Type'] == "Tabular": 
    print "Its tabular!" 
    numrows = obj['Format']['Tabular']['Num_row_labels'] 
    print "Numrows:", numrows 
    if numrows >= 5: 
     print "Print this fileName" 

OUTPUT:

Its tabular! 
Numrows: 5 
Print this fileName 
+0

感謝法拓士爲你的I/P。我可以像你的一樣獲得o/p。但我想打印我的文件的名稱是Multitab.mrk。謝謝。 – Nemo

+0

這應該很簡單。列出當前目錄中的每個* .mrk文件,對於每個文件按照上述方法,並且如果條件有效,則打印文件名。 – SuperSaiyan

+0

感謝Thrustmaster。你骯髒的小黑客確實爲我工作。 :)我可以在指定的目錄中遍歷所有帶有ext .mrk的文件,這很好。但我必須遍歷目錄內的所有子目錄。例如,我有一個名爲E:\ ABCD的目錄,在ABCD目錄中我有子目錄E:\ ABCD \ A,E:\ ABCD \ B,E:\ ABCD \ C和E:\ ABCD \ D。我需要遍歷每個子目錄中的所有文件。有什麼想法嗎?謝謝。 – Nemo