使用Python创建的较大文件已损坏

时间:2014-08-08 04:36:41

标签: python file

我正在写一个字幕转换器,SRT到DFXP用于Netflix。我在Windows 8 64bit下使用Python 2.7.8 32位。

代码本身似乎在第一个站点工作正常,它确实创建了一个新的DFXP文件,一切似乎都是有序的。

然而,在Netflix上加载字幕不起作用,它不会被播放。例如,我试图为Thor:The Dark World转换字幕,结果是90,7kb(这个尺寸很重要)。如果我用Notepad ++打开转换后的子,复制它的所有内容,并使用Notepad ++我创建一个新文件,将其粘贴并保存为DFXP字幕,它将在Netflix上正常工作。问题在于,这个新创建的文件(使用Notepad ++)大了91,8kb,比使用Python创建的文件多1kb,即使它具有完全相同的内容。

我甚至尝试使用WinMerge比较两个文件,用我的代码创建的文件和用Notepad ++创建的文件,WinMerge说它们完全相同。

当尝试转换较小的字幕时,这个问题不存在,通过Python创建的字幕也可以在Netflix上正常工作。

执行此操作的代码的摘录如下:

with open(out_file, 'w') as outf, open(in_file, 'r') as inf:
    outf.write('<tt xmlns="http://www.w3.org/2006/10/ttaf1">\n')
    outf.write('  <body>\n')
    outf.write('    <div xml:id="captions">\n')

    counter = 1
    for line in inf:
        if counter == 1:
            counter += 1
            subtitle = ''
            continue
        elif counter == 2:
            times = line.split('\n')[0].split(' --> ')
            begin_time = times[0].replace(',', '.')
            end_time = times[1].replace(',', '.')
            counter += 1
            continue
        elif counter == 3:
            if line == '\n':
                counter = 1
                new_line = '      <p begin="%s" end="%s">%s</p>\n' % (begin_time, end_time, subtitle)
                outf.write(new_line)
                continue
            if subtitle != '':
                subtitle += '<br />'
            if '<i>' in line:
                line = line.replace('<i>', '')
            if '</i>' in line:
                line = line.replace('</i>', '')
            subtitle += line.replace('\n', '')
    outf.write('    </div>\n')
    outf.write('  </body>\n')
    outf.write('</tt>\n')

创建新文件时是否遗漏了一些内容? Python创建的文件中缺少这个1,1kb究竟是什么?

1 个答案:

答案 0 :(得分:0)

感谢大家的评论,通过我设法让它工作。事实上,问题在于Ignacio Vazquez-Abrams和Tripleee所建议的开场时使用的charset。 David也是正确的,因为Notepad ++确实将新行扩展到了\ r \ n。

我首先通过在Notepad ++上转换输入文件来使其工作,然后使用PyICU修复代码以进行字符集检测。

感谢您的帮助。

相关问题