gpt4 book ai didi

Python 2.7 - 使用字典从文本文件中查找并替换为新的文本文件

转载 作者:太空狗 更新时间:2023-10-30 00:29:59 26 4
gpt4 key购买 nike

我是编程新手,这几个月一直在业余时间研究python。我决定尝试创建一个小脚本,将文本文件中的美式拼写转换为英语拼写。

在过去的 5 个小时里,我一直在尝试各种各样的事情,但最终想出了一些让我更接近目标的方法,但还差得远!

#imported dictionary contains 1800 english:american spelling key:value pairs. 
from english_american_dictionary import dict


def replace_all(text, dict):
for english, american in dict.iteritems():
text = text.replace(american, english)
return text


my_text = open('test_file.txt', 'r')

for line in my_text:
new_line = replace_all(line, dict)
output = open('output_test_file.txt', 'a')
print >> output, new_line

output.close()

我确信有一个更好的方法来处理事情,但是对于这个脚本,这里是我遇到的问题:

  • 在输出文件中,行是每隔一行写的,中间有一个换行符,但原始的 test_file.txt 没有这个。此页面底部显示的 test_file.txt 的内容
  • 只有一行中美国拼写的第一个实例会转换为英语。
  • 我真的不想以追加模式打开输出文件,但无法找出此代码结构中的“r”。

非常感谢这位热切的新手的帮助!

test_file.txt 的内容是:

I am sample file.
I contain an english spelling: colour.
3 american spellings on 1 line: color, analyze, utilize.
1 american spelling on 1 line: familiarize.

最佳答案

您看到的额外空行是因为您正在使用 print 写出一行末尾已经包含换行符的行。因为 print 也写了自己的换行符,所以你的输出变成了双倍行距。一个简单的解决方法是改用 outfile.write(new_line)

至于文件模式,问题在于您一遍又一遍地打开输出文件。您应该在开始时只打开一次。使用 with 语句来处理打开的文件通常是个好主意,因为它们会在您完成操作后为您关闭它们。

我不理解你的其他问题,只有一些替换发生了。您的字典是否缺少 'analyze''utilize' 的拼写?

我的一个建议是不要逐行进行替换。您可以使用 file.read() 一次读取整个文件,然后将其作为一个单元进行处理。这可能会更快,因为它不需要经常循环遍历拼写词典中的项目(只需一次,而不是每行一次):

with open('test_file.txt', 'r') as in_file:
text = in_file.read()

with open('output_test_file.txt', 'w') as out_file:
out_file.write(replace_all(text, spelling_dict))

编辑:

为了让您的代码正确处理包含其他词的词(例如“entire”包含“tire”),您可能需要放弃简单的 str.replace 方法,转而使用正则表达式。

这是一个使用 re.sub 的快速拼凑的解决方案,给出了从美国英语到英国英语的拼写变化的字典(也就是说,按照当前字典的相反顺序):

import re

#from english_american_dictionary import ame_to_bre_spellings
ame_to_bre_spellings = {'tire':'tyre', 'color':'colour', 'utilize':'utilise'}

def replacer_factory(spelling_dict):
def replacer(match):
word = match.group()
return spelling_dict.get(word, word)
return replacer

def ame_to_bre(text):
pattern = r'\b\w+\b' # this pattern matches whole words only
replacer = replacer_factory(ame_to_bre_spellings)
return re.sub(pattern, replacer, text)

def main():
#with open('test_file.txt') as in_file:
# text = in_file.read()
text = 'foo color, entire, utilize'

#with open('output_test_file.txt', 'w') as out_file:
# out_file.write(ame_to_bre(text))
print(ame_to_bre(text))

if __name__ == '__main__':
main()

这种代码结构的一个好处是,如果您以其他顺序将字典传递给 replacer_factory 函数,您可以轻松地将英式英语拼写转换回美式英语拼写。

关于Python 2.7 - 使用字典从文本文件中查找并替换为新的文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18840640/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com