我有以下代码,它使用二分搜索对单词进行拼写检查。它将要进行拼写检查的文件与字典文件进行比较,并返回所有拼写错误的单词。
当我将拼写错误的单词打印到终端时,拼写检查器起作用了,但现在我将其写入文件,它只能找到单词的一小部分。
Iv 还实现了一个计时器来计时搜索
import re
import time
start_time = time.time()
f1=open('writefile.txt', 'w+')
def binS(lo,hi,target):
if (lo>=hi):
return False
mid = (lo+hi) // 2
piv = words[mid]
if piv==target:
return True
if piv<target:
return binS(mid+1,hi,target)
return binS(lo,mid,target)
words = [s.strip("\n").lower() for s in open("words10k.txt")]
words.sort() # sort the list
text = open("shakespeare.txt" , encoding="utf8")
content = text.read().split(" ")
content = [item.lower() for item in content]
content = ' '.join(content)
content = re.findall("[a-z]+", content)
for w in content:
if not binS(0,len(words),w):
f1.write(w)
print("--- %s seconds ---" % (time.time() - start_time))
我之前有这段代码,通过打印到终端来工作。 (另外我怎样才能在写出文件中每行写入1个字)
内容中的 w:
如果不是 binS(0,len(words),w):
打印(w)
打印到终端搜索时间:2000秒
写入文件搜索时间:38秒
最佳答案
打开文件后我看不到您在哪里关闭该文件。对文件的写入会被缓冲,因此这可能是一个原因。
更正确的方法是在完成写入后使用 with
语句正确关闭文件:
with open('writefile.txt', 'w+') as f1:
for w in content:
if not binS(0,len(words),w):
f1.write(w)
<小时/>
其他新闻:
- 尝试使用
set
来存储单词
,以便进行高效的查找:if w not in Words: ...
< - 尝试使用
f1.writelines
和生成器表达式重写循环
关于python - 在Python中写入文件时数据被切断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49533573/