python - 在Python中写入文件时数据被切断

标签 python python-3.x

我有以下代码,它使用二分搜索对单词进行拼写检查。它将要进行拼写检查的文件与字典文件进行比较,并返回所有拼写错误的单词。

当我将拼写错误的单词打印到终端时,拼写检查器起作用了,但现在我将其写入文件,它只能找到单词的一小部分。

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/

相关文章:

Python:如何判断列表中的元素是否包含某个数字?

python - 使用opencv删除任何图像的背景

python - Bokeh 中的标签文本位置

python - 按最后 4 位数字升序排列字典的值

python - 有没有办法将 bash 脚本的输出到 "feed"到最初执行操作的 python 脚本中的变量中?

python-3.x - Tkinter - 了解如何切换帧

python - 无法使用 instabot 登录

python - 在 python shell 中运行一个基本的数字时钟

python - Flask:开发中如何实现媒体 Assets 的动态路由?

python - 修复索引错误 : List out of range issues