我有一個註釋文件列表,我需要刪除該文件(#)中的註釋行,並且需要在同一個文件上寫入。Python:如何刪除註釋行並寫入同一個文件?
註釋文件:
#Hi this the comment
define host {
use template
host_name google_linux
address 192.168.0.12
}
#commented config
#ddefine host {
#d use template1
#d host_name fb_linux
#d address 192.168.0.13
#d}
我寫刪除一個文件中的註釋行的代碼?
代碼:
>>> with open('commentfile.txt','r+') as file:
... for line in file:
... if not line.strip().startswith('#'):
... print line,
... file.write(line)
...
define host {
use template
host_name google_linux
address 192.168.0.12
}
>>> with open('commentfile.txt','r+') as file:
... for line in file:
... if line.strip().startswith('#'):
... continue
... print line,
... file.write(line)
...
define host {
use template
host_name google_linux
address 192.168.0.12
}
我嘗試使用上述兩種方法的打印輸出回到正確的,但能不能在同一個文件寫一遍。
輸出文件:
cat commentfile.txt
#Hi this the comment
define host {
use template
host_name google_linux
address 192.168.0.12
}
#commented config
#ddefine host {
#d use template1
#d host_name fb_linux
#d address 192.168.0.13
#d}
預期輸出:
cat commentfile.txt
define host {
use template
host_name google_linux
address 192.168.0.12
}
我甚至試過正則表達式的方法,但沒有工作在同一個文件寫入。
RE方法:
for line in file:
m = re.match(r'^([^#]*)#(.*)$', line)
if m:
continue
任何暗示將是有益的?
在讀取文件時寫入文件非常棘手。最好將整個文件讀入內存,對其進行處理,然後一次性將其轉儲迴文件中。這並不是那麼大,所以消耗的內存並不重要。 – deceze
如果它是一個小文件,請將整個文件讀入內存,關閉文件,執行處理並將其寫回。如果它是一個大文件,讀取文件,進程,同時寫入另一個文件,完成後,將臨時文件重命名爲原始文件。 – Vatine
@deceze我在循環播放這些文件。但是有些文件也有2GB的配置數據,可以嗎?如果我遵循你的方法。 –