基本上我正在做一个字幕项目。 非常复杂,但我只想在转换后的ASS文件中的所有行后面插入行(当前在实验中仍然是txt文件)
Untouched lines. I won't talk about Aegisub problems here
对话:0,0:00:00.00,0:00:03.90,默认,, 0,0,0 ,, Hello,观众。这是重组者,
对话:0,0:00:03.90,0:00:07.04,默认,, 0,0,0 ,,我们以组件形式拍摄日常物品的节目
对话:0,0:00:07.04,0:00:10.24,默认,0,0,0,并将它们放回原处,非常缓慢。
目标:
对话部分中的每一行都附有
'\N{\3c&HAA0603&\fs31\b1}'
对话:0,0:00:00.00,0:00:03.90,默认,, 0,0,0 ,, Hello,观众。这是重组器,\ N {\ 3c& HAA0603& \ fs31 \ b1}
对话:0,0:00:03.90,0:00:07.04,默认,, 0,0,0 ,,我们以组件形式采集日常物品的节目\ N {\ 3c& HAA0603& \ fs31 \ B1}
对话:0,0:00:07.04,0:00:10.24,默认,0,0,0,并将它们放回原点,非常缓慢。\ N {\ 3c& HAA0603& \ fs31 \ b1 }
Python 3.x代码:
text1 = open('d:\Programs\sub1.txt','r')
text2 = open('e:\modsub.ass','w+')
alltext1 = text1.read()
lines = alltext1.split('\n')
for i in range(lines.index('[Events]')+1,len(lines)):
lines[i] += ' hello '
print(lines)
text2.write(str(lines))
text1.close()
text2.close()
1.Python不能识别其中的一个或两个字符,显然是在unicode中
'\N{\3c&HAA0603&\fs31\b1}'
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 0-23: unknown Unicode character name
如何在不影响输出的情况下处理它?</ p>
2.当我使用'hello'而不是字幕代码时,输出是这样的:
'对话:0,0:00:07.04,0:00:10.24,默认,0,0,0,并将它们放回原处,非常缓慢。你好','对话:0,0:00:10.24,0:00:11.72,默认,0,0,0 ,,,感觉非常好。你好','对话:0,0:00:11.72,0:00:13.36,默认,0,0,0 ,,哦,是的。看那个!你好',
等等,而不是线后排列的线。 如何使字符串排成一行并取出引号和内容?
答案 0 :(得分:0)
使用原始字符串文字,即替换:
'\N{\3c&HAA0603&\fs31\b1}'
使用:
r'\N{\3c&HAA0603&\fs31\b1}'
通过这种方式,解释器不会尝试查找不存在的名为\3c&HAA0603&\fs31\b1
的unicode字符。
>>> '\N{\3c&HAA0603&\fs31\b1}'
File "<stdin>", line 1
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 0-23: unknown Unicode character name
>>> r'\N{\3c&HAA0603&\fs31\b1}'
'\\N{\\3c&HAA0603&\\fs31\\b1}'
>>> print(r'\N{\3c&HAA0603&\fs31\b1}')
\N{\3c&HAA0603&\fs31\b1}
答案 1 :(得分:0)
问题是你正在使用一个包含\
个字符的字符串,而不会转义它们。您需要将它们加倍或使用r''
表示法。
lines[i] += '\\N{\\3c&HAA0603&\\fs31\\b1}'
或
lines[i] += r'\N{\3c&HAA0603&\fs31\b1}'
至于你的另一个问题,你正在编写显示文字表示的str(lines)
。请改用'\n'.join(lines) + '\n'
。