Python 3.x 在file-Python中替换字符串

Python 3.x 在file-Python中替换字符串,python-3.x,Python 3.x,我正在努力改进我在网上看到的一个翻译脚本,这样它就可以接收文档并用它们的翻译替换被“”包围的单词 翻译工作很好,但我的问题来自于我试图进行替换。 它根本不这样做,而是复制了我文件中的最后一个字符 这是我的输入文件: 'Who' 'Where' 'How' 'Test' : 'Sun' : 'Water' 这是我的输出: 'Who' 'Where' 'How' 'Test' : 'Sun' : 'Water''''''' 脚本: from googletrans import Translat

我正在努力改进我在网上看到的一个翻译脚本,这样它就可以接收文档并用它们的翻译替换被“”包围的单词

翻译工作很好,但我的问题来自于我试图进行替换。 它根本不这样做,而是复制了我文件中的最后一个字符

这是我的输入文件:

'Who'
'Where'
'How'
'Test' : 'Sun' : 'Water'
这是我的输出:

'Who'
'Where'
'How'
'Test' : 'Sun' : 'Water'''''''
脚本:

from googletrans import Translator
import argparse
import os
import re
# init the translator
translator = Translator()

def translate(text, src="en", dest="fr"):
    """Translate `text` from `src` language to `dest`"""
    return translator.translate(text, src=src, dest=dest).text
    


if __name__ == "__main__":
    parser = argparse.ArgumentParser(description="Simple Python script to translate text using Google Translate API (googletrans wrapper)")
    parser.add_argument("target", help="Text/Document to translate")
    parser.add_argument("-s", "--source", help="Source language, default is Google Translate's auto detection", default="en")
    parser.add_argument("-d", "--destination", help="Destination language, default is English", default="fr")
    
    args = parser.parse_args()
    target = args.target
    src = args.source
    dest = args.destination
    
    if os.path.isfile(target):
        # translate a document instead
        # get basename of file
        basename = os.path.basename(target)
        # get the path dir
        dirname = os.path.dirname(target)
        try:
            filename, ext = basename.split(".")
        except:
            # no extension
            filename = basename
            ext = ""
            
        #Reading file
        with open(target,mode='r+', encoding='utf-8') as file:
            file_contents = file.read()
            
            text_to_translate = re.findall("'(.+?)'", file_contents)
            text_to_translate = list(set(text_to_translate))
            print(text_to_translate)

            i = 0
            y = 0
            translated_text = text_to_translate.copy()
            fout = open("out.txt", "wt")
            #Translating
            while i < len(translated_text):
                text = translated_text[i]
                translated = translate(text,src=src, dest=dest)
                print(translated)
                translated_text[i] = translated
                i+=1
                
            #Writting to file
            for line in file_contents:
                while y < len(text_to_translate):
                    print("Translation number "+str(y))
                    file.write(line.replace(text_to_translate[y], translated_text[y]))
                    y+=1
            fout.close()

            
    else:
        # not a file, do nothing
        print("wrong file input")
来自googletrans导入转换器的

导入argparse
导入操作系统
进口稀土
#初始化翻译程序
translator=translator()
def翻译(文本,src=“en”,dest=“fr”):
“”“将`text`从`src`语言翻译为`dest`”
返回translator.translate(text,src=src,dest=dest).text
如果名称=“\uuuuu main\uuuuuuuu”:
parser=argparse.ArgumentParser(description=“使用Google translate API(googletrans包装器)翻译文本的简单Python脚本)”
parser.add_参数(“target”,help=“要翻译的文本/文档”)
parser.add_参数(“-s”,“--source”,help=“源语言,默认为谷歌翻译的自动检测”,default=“en”)
parser.add_参数(“-d”,“--destination”,help=“destination language,默认为英语”,default=“fr”)
args=parser.parse_args()
target=args.target
src=args.source
dest=args.destination
如果os.path.isfile(目标):
#改为翻译文件
#获取文件的基本名称
basename=os.path.basename(目标)
#获取路径dir
dirname=os.path.dirname(目标)
尝试:
文件名,ext=basename.split(“.”)
除:
#没有分机
filename=basename
ext=“”
#读取文件
以open(target,mode='r+',encoding='utf-8')作为文件:
file_contents=file.read()
text_to_translate=re.findall(“(.+?)”,文件内容)
text_to_translate=列表(设置(text_to_translate))
打印(文本到译文)
i=0
y=0
translated\u text=文本\u to\u translate.copy()
fout=打开(“out.txt”、“wt”)
#翻译
而我
看起来您已以只读模式打开文件。当我通常必须进行读写操作时,我打开一个文件进行读操作,打开另一个文件进行写操作;任何未更改的行都会写入写入文件,也会写入已更改的行。我通过提取所有需要编辑的值,然后按您在“w”中所说的打开文件,成功地对其进行了更正。谢谢