我是编程新手,过去几个月我一直在业余时间学习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的内容是:
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
语句添加了自己的新行,但您的行已经有了自己的新行。您可以从new_line
中删除换行符,或者使用较低级别取而代之的是(它准确地写出你传递给它的内容)。
关于第二个问题,我想我们需要一个实际的例子。
replace()
确实应该替换所有匹配项。我不知道你的第三个问题是什么。如果要替换输出文件,请执行
'w'
表示您正在打开文件进行写入。您看到的额外空行是因为您正在使用
print
写出一行,该行的末尾已经包含一个换行符。由于print
也编写了自己的换行符,因此您的输出将变为双倍行距。一个简单的解决方法是使用outfile.write(new_line)
代替。至于文件模式,问题是您要反复打开输出文件。你应该一开始就打开一次。使用
with
语句来处理打开的文件通常是一个好主意,因为当您处理完它们时,它们会帮您关闭它们。我不理解你的另一个问题,只有一些替代发生。你的字典缺少
'analyze'
和'utilize'
的拼写吗?我的一个建议是不要逐行更换。您可以使用
file.read()
一次读取整个文件,然后将其作为单个单元处理。这可能会更快,因为它不需要在拼写词典中的项目上循环那么频繁(只循环一次,而不是每行循环一次):编辑:
为了使代码正确地处理包含其他单词的单词(比如包含“tire”的“entire”),您可能需要放弃简单的
str.replace
方法,转而使用正则表达式。下面是一个使用
re.sub
的快速拼凑解决方案,给出了一个从美式英语到英式英语的拼写变化词典(即,与当前词典的顺序相反):这种代码结构的一个好处是,如果您按照另一个顺序将字典传递给
replacer_factory
函数,那么您可以轻松地从英式英语拼写转换回美式英语拼写。作为以上所有的好答案,我写了一个新版本,我认为是更Python,希望这有助于:
你也可以看到我之前问的答案,它包含许多最佳实践建议: Loading large file (25k entries) into dict is slow in Python?
下面是一些关于如何编写更多python的其他技巧:) http://python.net/~goodger/projects/pycon/2007/idiomatic/handout.html
祝你好运:)
相关问题 更多 >
编程相关推荐