我已經寫了一些Python代碼中使用fileinput
與inplace
操作文件,其中沿該線看起來:使用Python的的FileInput與虛擬文件/ RAM文件
import fileinput
def do_stuff_with_file(filename, parameters):
for line in fileinput.input(filename, inplace=1):
new_line = do_a_lot_of_stuff_with(line, parameters)
print_something(line, parameters)
print new_line,
print_some_more(line, parameters)
do_stuff_with_file(["a.dat","b.dat"], parameters[1])
do_stuff_with_file("c.dat", parameters[2])
do_stuff_with_file("a.dat", parameters[3])
for i in range(100):
do_stuff_with_file("d.dat", parameters[i])
雖然我叫do_stuff_with_file
通常一次或兩次每個文件都有一個文件(這裏是d.dat
),我經常這樣稱呼它,這會導致文件¹不必要的讀寫。
有沒有什麼好的方法來改變上面的代碼而不改變使用的功能,使這個特殊的文件只讀取一次?我在尋找與操作系統無關的方法,例如,我無法在RAM磁盤上創建文件的臨時副本,或者希望操作系統足夠智能,以避免在程序完成之前實際將文件寫入磁盤。
途徑這個問題,我能想到的,但需要的功能,我沒能找到:
- 獲取
fileinput
對字符串而不是一個文件進行操作。 - 「倒帶」
fileinput
莫名其妙。 - 確保文件保持打開狀態(並使用臨時副本)。
- 找到一些其他處理字符串或使用
print
類似的模塊,如fileinput
那樣。 - 以一些與操作系統無關的方式創建一個Python內部的虛擬文件。
注意fileinput
通過重定向print
向寫入文件的當前位置實現文件操作在自己特有的方式,尤其如此。因此,使用相同的(或非常相似的)操作來修改別的東西,例如一個字符串,沒有直接的方法。這是我的問題的主要原因。
嘗試將此函數更改爲一個類並創建它的子類,它應稍微更改此函數。這樣'a.dat'abd'b.dat'將在父類方法和'c。dat'將會在子類方法中被刪除。 –
@ f.rodrigues:這會如何避免多次打開並寫入'd.dat'? – Wrzlprmft