我在我的代码末尾的write()方法行旁边放置了trailing print()方法,以测试输出文件不完整的原因。但是,print()输出是我所期望的“所有东西”;而write()输出被一个令人困惑的数量关闭(200个'东西'中只有150个)。 输出的参考图像:IDLE versus external output file
仅供参考:Win 7 64 // Python 3.4.2
我的模块采用SRT字幕文件('test.srt')并返回我创建的列表对象;特别是,有一个220列表条目的形式:[[(index),[time],string]]
times = open('times.txt', 'w')
### A portion of Riobard's SRT Parser: srt.py
import re
def tc2ms(tc):
''' convert timecode to millisecond '''
sign = 1
if tc[0] in "+-":
sign = -1 if tc[0] == "-" else 1
tc = tc[1:]
TIMECODE_RE = re.compile('(?:(?:(?:(\d?\d):)?(\d?\d):)?(\d?\d))?(?:[,.](\d?\d?\d))?')
match = TIMECODE_RE.match(tc)
try:
assert match is not None
except AssertionError:
print(tc)
hh,mm,ss,ms = map(lambda x: 0 if x==None else int(x), match.groups())
return ((hh*3600 + mm*60 + ss) * 1000 + ms) * sign
# my code
with open('test.srt') as f:
file = f.read()
srt = []
for line in file:
splitter = file.split("\n\n")
# SRT splitter
i = 0
j = len(splitter)
for items in splitter:
while i <= j - 2:
split_point_1 = splitter[i].index("\n")
split_point_2 = splitter[i].index("\n", split_point_1 + 1)
index = splitter[i][:split_point_1]
time = [splitter[i][split_point_1:split_point_2]]
time = time[0][1:]
string = splitter[i][split_point_2:]
string = string[1:]
list = [[(index), [time], string]]
srt += list
i += 1
# time info outputter
i = 0
j = 1
for line in srt:
if i != len(srt) - 1:
indexer = srt[i][1][0].index(" --> ")
timein = srt[i][1][0][:indexer]
timeout = srt[i][1][0][-indexer:]
line_time = (tc2ms(timeout) - tc2ms(timein))/1000
space_time = ((tc2ms((srt[j][1][0][:indexer]))) - (tc2ms(srt[i][1][0][-indexer:])))/1000
out1 = "The space between Line " + str(i) + " and Line " + str(j) + " lasts " + str(space_time) + " seconds." + "\n"
out2 = "Line " + str(i) + ": " + str(srt[i][2]) + "\n\n"
times.write(out1)
times.write(out2)
print(out1, end="")
print(out2)
i += 1
j += 1
else:
indexer = srt[i][1][0].index(" --> ")
timein = srt[i][1][0][:indexer]
timeout = srt[i][1][0][-indexer:]
line_time = (tc2ms(timeout) - tc2ms(timein))/1000
outend = "Line " + str(i) + ": " + str(srt[i][2]) + "\n<End of File>"
times.write(outend)
print(outend)
我的两个write()方法输出文件分别只打印出其中正确打印到屏幕上的220件物品中的~150或~200件物品。
答案 0 :(得分:1)
完成编写后,您希望关闭您的bytes = (byte[])sdr["Data"];
byte[] buffer = bytes;
MemoryStream memory = new MemoryStream(buffer.ToArray());
string decoded = Encoding.UTF8.GetString(memory.ToArray());
XPathDocument myXPathDoc = new XPathDocument(decoded);
XslCompiledTransform myXslTrans = new XslCompiledTransform();
myXslTrans.Load(Server.MapPath("~/Xsl/CCD.xsl"));
XmlTextWriter myWriter = new XmlTextWriter("some.html", null);
myXslTrans.Transform(myXPathDoc, null, myWriter);
文件;操作系统使用写缓冲区来加速文件I / O,一次性收集要写入磁盘的较大数据块;关闭文件会刷新缓冲区:
times
考虑在times.close()
块中打开文件:
with