打开要追加的文件

时间:2018-08-17 05:32:27

标签: python-2.7 nonetype errno

编辑:我似乎已经以即席的方式修复了它。我确实认为这是一个切实可行的解决方案,但这是不可接受的答案。我只添加了写之前的fp.read()语句。谁能解释为什么这会避免Errno 0?那就是没有fp.read()行的情况。

我一直在尝试制作一个脚本,每天将一些html代码附加到我的便笺文件中。我在更新文件时遇到了麻烦。我已经尝试了所有open()标签(rwar+等)。

代码:

从bs4导入BeautifulSoup     bs = BeautifulSoup

import datetime

with open("crossfireNewNotes.html",'a+') as fp:
    soup= bs(fp,"lxml")
    print "8 " + str(soup)
    print "9 " + str(soup.html)


    today=str(datetime.date.today())
    print "11 " + str(soup) 
    if soup.select("body#" + today) ==[]:

        new_body=soup.new_tag("body",id=today)
        new_p=soup.new_tag("p")
        new_olink=soup.new_tag("a",link=today)
        new_ilink=soup.new_tag("a",href=today)

        soup.html.append(new_body)
        soup.html.select("body#" + today)[0].append(new_olink)
        soup.html.select("body#" + today)[0].select("a[link=" + today + "]").append(new_p)
        soup.body.insert_before(new_ilink)

        print "25 " + str(soup) 

        fp.read()
        fp.write(str(soup))
        fp.close()

之前,文件对象是NoneType,这给我带来了其他问题。现在它似乎可以正常打开,但是我在cmd中有以下输出:

Line 8: <html></html>
Line 11: <html></html>
Line 25: <html><a href="2018-08-18"></a><body id="2018-08-18"><a link="2018-08-18"></a></body></html>
Traceback (most recent call last):
   File "noter.py", line 29, in (module)
     fp.write(str(soup))
IOError: [Errno 0] Error

或者,如果有人有更好的方法,我会向他们开放。

1 个答案:

答案 0 :(得分:1)

您遇到的问题在于以fp模式打开文件处理程序append和通过soup.html.appendsoup.html.select方法移动指针。一旦要写入文件,指针将不再位于文件末尾。如果您read()文件,则指针又位于末尾,因此您可以再次写入。更好的方法是fp.seek(0,2)查找文件的结尾。

更好的是,您可以先将html文件的内容加载到BeautifulSoup中,进行更改,然后从汤对象写入文件,从而使用两个单独的文件IO。