![](/img/trans.png)
[英]dynamically read and/or overwrite an excel file with python without the overwrite alert appearing
[英]Read and overwrite a file in Python
目前我正在使用這個:
f = open(filename, 'r+')
text = f.read()
text = re.sub('foobar', 'bar', text)
f.seek(0)
f.write(text)
f.close()
但問題是舊文件比新文件大。 所以我最終得到了一個新文件,它的末尾有一部分舊文件。
如果您不想關閉並重新打開文件,為了避免競爭條件,您可以truncate
它:
f = open(filename, 'r+')
text = f.read()
text = re.sub('foobar', 'bar', text)
f.seek(0)
f.write(text)
f.truncate()
f.close()
使用open
作為上下文管理器,該功能也可能更清晰、更安全,即使發生錯誤,它也會關閉文件處理程序!
with open(filename, 'r+') as f:
text = f.read()
text = re.sub('foobar', 'bar', text)
f.seek(0)
f.write(text)
f.truncate()
fileinput
模塊有一個inplace
模式,用於在不使用臨時文件等的情況下將更改寫入您正在處理的文件。該模塊很好地封裝了循環遍歷文件列表中的行的常見操作,通過一個透明地跟蹤文件的對象名稱、行號等,如果你想在循環內檢查它們。
from fileinput import FileInput
for line in FileInput("file", inplace=1):
line = line.replace("foobar", "bar")
print(line)
在text = re.sub('foobar', 'bar', text)
之后關閉文件可能會更容易和更整潔,重新打開它進行寫入(從而清除舊內容),然后將更新的文本寫入其中。
我發現閱讀它然后再寫它更容易記住。
例如:
with open('file') as f:
data = f.read()
with open('file', 'w') as f:
f.write('hello')
老實說,您可以看看我構建的這個執行基本文件操作的類。 write 方法覆蓋並追加保留舊數據。
class IO:
def read(self, filename):
toRead = open(filename, "rb")
out = toRead.read()
toRead.close()
return out
def write(self, filename, data):
toWrite = open(filename, "wb")
out = toWrite.write(data)
toWrite.close()
def append(self, filename, data):
append = self.read(filename)
self.write(filename, append+data)
對於任何想要按行閱讀和覆蓋的人,請參閱此答案。 https://stackoverflow.com/a/71285415/11442980
filename = input("Enter filename: ")
with open(filename, 'r+') as file:
lines = file.readlines()
file.seek(0)
for line in lines:
value = int(line)
file.write(str(value + 1))
file.truncate()
嘗試將其寫入新文件中..
f = open(filename, 'r+')
f2= open(filename2,'a+')
text = f.read()
text = re.sub('foobar', 'bar', text)
f.seek(0)
f.close()
f2.write(text)
fw.close()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.