python设计问答器_Python文件包装器,最佳设计?
我需要解析一個特定于域的配置文件,但是在我開始從中提取黃金之前,我想刪除注釋。在
一旦刪除了注釋,我仍然希望能夠使用getline()、seek()和{}之類的東西
(由于刪除了大量的塊,所以在查找時偏移量很小,因為所有解析都封裝在一個解析對象中)
從^{繼承?:
我的第一個想法是創(chuàng)建一個類似MyFile(file)的對象,然后重寫__init__來創(chuàng)建一個self.content字符串,然后用文件訪問覆蓋所有內容。。。但這看起來太棘手了(我在論壇上看到很多人都很難嘗試這個)
委托給file對象?:
創(chuàng)建一個創(chuàng)建file類的MyFile(file)類,并將來自MyFile實例的調用委托給內部的file實例。
如果對MyFile的調用期望返回超出注釋find/replace搜索參數(shù)的返回。。。
例如:getline()對于單行注釋是可以的,但是對于前3行構成單個塊注釋的文件,getline()getline()如果沒有大量雜亂的代碼,getline()就無法工作
(更不用說跟蹤seek()偏移量)
在臨時文件中重新創(chuàng)建?:
最后,我覺得我在解析整個文件時使用了lazy選項,然后將其重新保存為臨時文件。。。然后返回一個文件句柄(下面的演示代碼)import re
import tempfile
FILE_NAME = 'some_file.ldf'
# ideal case
fh = open(FILE_NAME)
# my example
def getHandle(self, filename, mode='r'):
# ----- Remove comments -----
with open(filename, mode=mode) as fh:
content = fh.read()
# remove /* ... */ comment blocks
content = re.sub(re.compile(r'/\*.*?\*/', re.DOTALL | re.MULTILINE), '', content, re.DOTALL | re.MULTILINE)
# remove // ... line comments
content = re.sub(r'//.*', '', content)
# ----- Write to Temporary File -----
fh = tempfile.TemporaryFile()
fh.write(content)
fh.seek(0)
fh = getHandle(FILE_NAME)
更好的設計?:
有人有更好的設計嗎?。。。
或者在這類問題上有一個完全不同的角度。在
總結
以上是生活随笔為你收集整理的python设计问答器_Python文件包装器,最佳设计?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql提高并行并行_oracle 并
- 下一篇: win10下载python失败_pyth