2017-12-09 2 views
2

자막 용 deepl을 사용하여 번역기를 만들려고하고 있지만 완벽하게 실행되지 않습니다. 나는 자막을 번역 할 수 있었고 대부분은 선을 대체하는 데 문제가있다. 선이 인쇄되기 때문에 선이 번역되었지만 선을 대체하지는 않습니다. 프로그램을 실행할 때마다 원본 파일과 동일합니다.Python : 파일에서 행을 바꾸는 데 문제가 있습니다.

이 책임이있는 코드는 다음과 같습니다

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") 

이가있는 파일을 보는 방법 :

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됩니다 :) 감사합니다.

+2

하나의 파일에서 더 읽고 다른 사람에게 편지를 쓰는 것이 좋습니다. 이전의 것보다 많은 데이터를 쓸 때 다음 줄을 덮어 씁니다. 더 많은 데이터를 유지하기 위해 라인의 크기를 조정하지 않습니다. – 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(...) 

업데이트

하지만 : 당신이 추가 반대로 원래의 내용을 덮어 싶은 경우에, 당신은 대신을 시도해야한다 두 개의 별도 입력 및 출력 파일이있는 것 같습니다. 그렇다면 다음을 고려하십시오.

+0

답변을 주셔서 감사합니다. 그러나 같은 줄의 여러 복사본이 50처럼 실행됩니다. 또한 숫자와 시간을 어떻게 유지합니까? – MatejMecka

+0

@UnknownDeveloper 왜 그런지 상상해 보지 못했습니다. 업데이트 된 게시물을 확인하십시오. – PythEch

+0

내용이 파일에 기록됩니다. '5 00 : 00 : 12,013 -> 00 : 00 : 14,046'도 복사 할 수 있습니까? – MatejMecka

관련 문제