假設我有一個包含48,222行的文件。然後我給出一個指數值,比方說21,000。將文件的某些部分「移動」到另一個文件
Python中是否有任何方式可以從索引21,000開始「移動」文件的內容,現在我有兩個文件:原始文件和新文件。但是原來的一條現在有21,000條線和新的27,222條線。
我讀這post它使用的分區,是相當描述我想要什麼:
with open("inputfile") as f:
contents1, sentinel, contents2 = f.read().partition("Sentinel text\n")
with open("outputfile1", "w") as f:
f.write(contents1)
with open("outputfile2", "w") as f:
f.write(contents2)
只是(1)它使用「哨兵文本」作爲分隔符,(2),它創建了兩個新的文件,需要我刪除舊文件。截至目前,我這樣做的方式是這樣的:
for r in result.keys(): #the filenames are in my dictionary, don't bother that
f = open(r)
lines = f.readlines()
f.close()
with open("outputfile1.txt", "w") as fn:
for line in lines[0:21000]:
#write each line
with open("outputfile2.txt", "w") as fn:
for line in lines[21000:]:
#write each line
這是一個相當手動的工作。有沒有內置或更有效的方法?
如果所有的線條都是一樣的長度,你可以用'seek',如果不是我想的內存明智倒不如循環21000倍'的ReadLine()'和傳球然後加載所有行內存與'readlines'(在你提到的第二個選項) –
@UShaShalit不,他們很不幸,每行的長度不一樣... :(它大約是每個文件1.5-3 MB。到目前爲止,我花了250ms時間來打開和讀取一個文件,問題是,我有這樣的數千個文件,我想知道是否有更高效的方法 – Ian