Python-读取txt文件中列出的.htm文件
我正在使用下面的内容阅读一些.htm文件Python-读取txt文件中列出的.htm文件,python,Python,我正在使用下面的内容阅读一些.htm文件 from bs4 import BeautifulSoup import os BASEDIR = "C:\\designers" aa = os.listdir(BASEDIR) text_file = open(os.path.join(BASEDIR, 'all htm.txt'), "w") for b in aa: if b.endswith('.htm'): c = os.path.join(BASEDIR, b
from bs4 import BeautifulSoup
import os
BASEDIR = "C:\\designers"
aa = os.listdir(BASEDIR)
text_file = open(os.path.join(BASEDIR, 'all htm.txt'), "w")
for b in aa:
if b.endswith('.htm'):
c = os.path.join(BASEDIR, b)
text_file.write(c)
text_file.write('\n')
text_file.close()
list_open = open(os.path.join(BASEDIR, 'all htm.txt'))
read_list = list_open.read()
line_in_list = read_list.split('\n')
for i, ef in enumerate(line_in_list):
page = open(ef)
soup = BeautifulSoup(page.read())
print i
print soup
但是,它只读取第一个文件,然后给出错误:
IOError: [Errno 22] invalid mode ('r') or filename: ''
出了什么问题
谢谢
“kev”指出了问题:txt文件中有不需要的行 有很多方法可以删除txt中的空行 除此之外,最后一部分可以更改为:
for i, ef in enumerate(line_in_list):
if '.htm' in ef: # or 'len(ef) > 1' etc...
page = open(ef)
soup = BeautifulSoup(page.read())
print i
print soup
因为在创建“all htm.txt”(无论是否是最后一行)时,您在每一行的末尾都写入了
\n
,所以在文件的末尾会出现一个空行。因此,当您在换行符上拆分时,列表中的行\u的末尾会出现一个空字符串
相反,执行枚举(列表[:-1]中的行)
,这将忽略最后一个(空)元素
或者,您可以在迭代的每个循环周围放置一个try:except:
块,并在异常发生时优雅地处理/忽略异常,从而使代码更加健壮。这将保护您避免将来代码中出现问题:
例如:
for i, ef in enumerate(line_in_list):
try:
page = open(ef)
soup = BeautifulSoup(page.read())
print i
print soup
except IoError:
print 'ignoring file %s'%ef
except Exception:
print 'an unhandled exception occurred for file %s'%ef
这将是有趣的错误发生在代码的哪一行
小心从文件aa
读取的行b
。它们以换行符\n
结束。因此,IF条件永远不会为真,您将生成一个空文件all html.txt
试一试
这将减少b开头和结尾的任何空白(如空格、回车、制表符、换行符等)。在all htm.txt
中是否有空行?谢谢,凯文。我相信是这样,因为有“text_file.write('\n')”。。。
x=b.strip()
if(x.endswith(".htm")):
....