Python 2.7 打开要追加的文件

Python 2.7 打开要追加的文件,python-2.7,nonetype,errno,Python 2.7,Nonetype,Errno,编辑:我好像是临时修好的。我确实认为这是一个切实可行的解决办法,但这是一个不可接受的答案。在写之前,我只添加了一个fp.read()语句。有人能解释为什么这样可以避免错误0吗?这就是没有fp.read()行的情况 我一直在尝试制作一个脚本,每天在notes文件中添加一点html代码。不过我在更新文件时遇到了麻烦。我已经尝试了所有的open()标记(r,w,a,r+等) 代码: 从bs4导入BeautifulSoup bs=美联 import datetime with open("crossf

编辑:我好像是临时修好的。我确实认为这是一个切实可行的解决办法,但这是一个不可接受的答案。在写之前,我只添加了一个fp.read()语句。有人能解释为什么这样可以避免错误0吗?这就是没有fp.read()行的情况

我一直在尝试制作一个脚本,每天在notes文件中添加一点html代码。不过我在更新文件时遇到了麻烦。我已经尝试了所有的
open()
标记(
r
w
a
r+
等)

代码:

从bs4导入BeautifulSoup bs=美联

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()
以前,file对象是非类型的,这给了我其他问题。现在它似乎打开得很好,但我在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
第8行:
第11行:
第25行:
回溯(最近一次呼叫最后一次):
文件“noter.py”,第29行,在(模块)中
fp.write(str(soup))
IOError:[Errno 0]错误

或者,如果有任何人有更好的方法,我对他们持开放态度。

您遇到的问题是在
append
模式下打开filehandler
fp
,然后通过
soup.html.append
soup.html移动指针。选择
方法。一旦要写入文件,指针就不再位于文件末尾。如果您
read()
文件,则指针再次位于末尾,因此您可以再次写入。更好的方法是找到文件的结尾


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

从这里给出的内容来看,这似乎是一个缩进问题。您需要使用
继续缩进
,否则文件
fp
将提前关闭。我已经尝试过了。这没有改变任何事情。如果运行代码,您会注意到第8行print语句没有为str(soup)打印任何内容,因此即使在语句中,它也认为它是空的。
mode='a'
用于append<代码>a+
不是一件事,不要这样做。错误:模式“'r+”、'w+”和'a+”打开文件进行更新(读写)-