打開和關閉文件操作相對較慢。如果可能,您應該只打開和關閉一次文件。在你的情況下,你可以將p和g行存儲在列表中,然後在循環結束後立即寫入所有行。
file = open('D:\\mydirectory\\soggetti.txt','r')
file_pf = open("D:\\mydirectory\\file_pf.txt","w")
file_pg = open("D:\\mydirectory\\file_pg.txt","w")
file_pf.close()
file_pg.close()
p_lines = []
g_lines = []
i = 0
with file:
for line in file:
i = 0
c = 0
while i < len(line):
carattere = line[i]
if carattere == "|":
c = c + 1
if c == 4:
if line[i-1] == "P":
p_lines.append(line)
break
elif line[i-1] == "G":
g_lines.append(line)
break
i = i + 1
file.close()
file_pf = open("D:\\mydirectory\\file_pf.txt","w")
file_pf.writelines(p_lines)
file_pf.close()
file_pg = open("D:\\mydirectory\\file_pg.txt","w")
file_pg.writelines(g_lines)
file_pg.close()
您還可以通過使用split
更容易地識別每行中字段的內容。
file = open('D:\\mydirectory\\soggetti.txt','r')
file_pf = open("D:\\mydirectory\\file_pf.txt","w")
file_pg = open("D:\\mydirectory\\file_pg.txt","w")
file_pf.close()
file_pg.close()
p_lines = []
g_lines = []
with file:
for line in file:
fields = line.split("|")
if fields[3] == "P":
p_lines.append(line)
elif fields[3] == "G":
g_lines.append(line)
file.close()
file_pf = open("D:\\mydirectory\\file_pf.txt","w")
file_pf.writelines(p_lines)
file_pf.close()
file_pg = open("D:\\mydirectory\\file_pg.txt","w")
file_pg.writelines(g_lines)
file_pg.close()
順便說,嚴格來說,你並不需要使用with
和明確關閉該文件一旦你用它做。你可以做一個或另一個。在腳本開始時不需要打開並立即關閉file_pf
和file_pg
。
p_lines = []
g_lines = []
with open('D:\\mydirectory\\soggetti.txt','r') as file:
for line in file:
fields = line.split("|")
if fields[3] == "P":
p_lines.append(line)
elif fields[3] == "G":
g_lines.append(line)
file_pf = open("D:\\mydirectory\\file_pf.txt","w")
file_pf.writelines(p_lines)
file_pf.close()
file_pg = open("D:\\mydirectory\\file_pg.txt","w")
file_pg.writelines(g_lines)
file_pg.close()
如果您想擁有比「P」和未來的「g」等多個線路類型,它可以爲您節省一些時間,各種線條的存儲在詞典:
from collections import defaultdict
lines_to_write = defaultdict(list)
with file as open('D:\\mydirectory\\soggetti.txt','r'):
for line in file:
fields = line.split("|")
lineType = fields[3].lower()
lines_to_write[lineType].append(line)
for lineType, lines in lines_to_write.iteritems():
filename = "D:\\mydirectory\\file_{}f.txt".format(lineType)
with file as open(filename,"w"):
file.writelines(lines)
您可以通過跟蹤您所在的行號並定期打印消息來向用戶報告已處理了多少行。
how_often_to_report = 100 #prints message every one hundred lines
with file as open('D:\\mydirectory\\soggetti.txt','r'):
for line_number, line in enumerate(file):
if line_number % how_often_to_report == 0:
print "{} lines processed", line_number
#do rest of processing work here
'line.split( '|')[3]'應該給你 'P' 或 'G' 爲每一行。打開和關閉每個寫入的輸出文件也非常昂貴。在開始時打開它們,並在最後關閉它們。如果你擔心異常,那麼使用'closing'上下文管理器。 – PaulMcG