Python-读取txt文件中列出的.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

我正在使用下面的内容阅读一些.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)
        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")):
        ....