Python 2.7 打开要追加的文件
编辑:我好像是临时修好的。我确实认为这是一个切实可行的解决办法,但这是一个不可接受的答案。在写之前,我只添加了一个fp.read()语句。有人能解释为什么这样可以避免错误0吗?这就是没有fp.read()行的情况 我一直在尝试制作一个脚本,每天在notes文件中添加一点html代码。不过我在更新文件时遇到了麻烦。我已经尝试了所有的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
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
模式下打开filehandlerfp
,然后通过soup.html.append
和soup.html移动指针。选择方法。一旦要写入文件,指针就不再位于文件末尾。如果您read()
文件,则指针再次位于末尾,因此您可以再次写入。更好的方法是找到文件的结尾
更好的是,您可以先将html文件的内容加载到BeautifulSoup中,进行更改,然后从soup对象写入文件,这样就可以使用两个单独的文件IO。从这里给出的内容来看,这似乎是一个缩进问题。您需要使用
继续缩进,否则文件fp
将提前关闭。我已经尝试过了。这没有改变任何事情。如果运行代码,您会注意到第8行print语句没有为str(soup)打印任何内容,因此即使在语句中,它也认为它是空的。mode='a'
用于append<代码>a+
不是一件事,不要这样做。错误:模式“'r+”、'w+”和'a+”打开文件进行更新(读写)-