2017-12-09 13 views
2

私はdeeplを使用して字幕を作成しようとしていますが、完全には動作していません。私は字幕を翻訳することができました。そして、私はその行の代わりに問題を抱えている部分のほとんどを管理しました。私はそれが印刷されるので行が翻訳されているのがわかりますが、行はそれらを置き換えません。プログラムを実行するたびに、元のファイルと同じになります。Python:ファイルから行を置き換えるのに問題があります

これは責任のコードです:

1 
00:00:02,470 --> 00:00:04,570 
     - Yes, I do. 
     - (laughs) 

2 
00:00:04,605 --> 00:00:07,906 
     My mom doesn't want 
     to babysit everyday 

3 
00:00:07,942 --> 00:00:09,274 
     or any day. 

4 
00:00:09,310 --> 00:00:11,977 
     But I need 
    my mom's help sometimes. 

5 
00:00:12,013 --> 00:00:14,046 
     She's just gonna 
    have to be grandma today. 

ヘルプがappreaciatedされます:) 感謝を:

def translate(input, output, languagef, languaget): 
    file = open(input, 'r').read() 
    fileresp = open(output,'r+') 
    subs = list(srt.parse(file)) 
    for sub in subs: 
     try: 
      linefromsub = sub.content 
      translationSentence = pydeepl.translate(linefromsub, languaget.upper(), languagef.upper()) 
      print(str(sub.index) + ' ' + translationSentence) 
      for line in fileresp.readlines(): 
       newline = fileresp.write(line.replace(linefromsub,translationSentence)) 
     except IndexError: 
      print("Error parsing data from deepl") 

これは、ファイルがどのように見えるかです。

+2

1つのファイルから読み込み、別のファイルに書き込む方が効果的です。前回よりも多くのデータを書き込むと、次の行が上書きされます。より多くのデータを保持するためにラインのサイズを変更しません。 – furas

答えて

2

filerespr+モードで開いています。 readlines()に電話すると、ファイルの位置はファイルの最後に設定されます。その後、write()への呼び出しがファイルに追加されます。それはあなたがここにr+モードで達成しようとしているかを確認するのは難しい

allLines = fileresp.readlines() 
fileresp.seek(0) # Set position to the beginning 
fileresp.truncate() # Delete the contents 
for line in allLines: 
    fileresp.write(...) 

更新

それ:あなたが追加するとは対照的に、元の内容を上書きしたい場合は、代わりにこれを試してみてください2つの入力ファイルと出力ファイルがあるようです。その場合は、次の点を考慮してください。

def translate(input, output, languagef, languaget): 
    file = open(input, 'r').read() 
    fileresp = open(output, 'w') # Use w mode instead 
    subs = list(srt.parse(file)) 
    for sub in subs: 
     try: 
      linefromsub = sub.content 
      translationSentence = pydeepl.translate(linefromsub, languaget.upper(), languagef.upper()) 
      print(str(sub.index) + ' ' + translationSentence) 
      fileresp.write(translationSentence) # Write the translated sentence 
     except IndexError: 
      print("Error parsing data from deepl") 
+0

答えをありがとうが、私は50のように同じ行の複数のコピーを実行すると実行されます。また、数字と時間をどのように保つのですか? – MatejMecka

+0

@UnknownDeveloperなぜ私は想像するのが難しいです、更新された投稿をご覧ください。 – PythEch

+0

内容がファイルに書き込まれます。 '5 00:00:12,013 - > 00:00:14,046'もコピーできますか? – MatejMecka

関連する問題