python читает все файлы из папки и записывает имя файла и другую информацию в текстовый файл

У меня есть 30911 html-файлов. Мне нужно сделать веб-скрейпинг, а затем сохранить информацию в текстовый файл с именем index.txt. Это должно выглядеть так

filename1, title, t1, date, p1
filename2, title, t1, date, p1
filename3, title, t1, date, p2
and so on...

Мне нужно только имя файла, но вывод дал мне путь+имя файла.


person Michael Lin    schedule 29.05.2017    source источник


Ответы (3)


Ваша проблема в том, что имя файла на самом деле является путем к файлу, чтобы получить имя файла, вы можете использовать модуль os

os.path.basename('filepath')

поэтому для записи в файл:

indexFile.write(os.path.basename(filename)+ ', ' + title.get_text(strip=True) + ', '+ ticker.get_text(strip=True) + ', ' + d_date.get_text(strip=True) + ', ' + parti_names + '\n')
person Stavros Avramidis    schedule 29.05.2017
comment
Я добавил, как его использовать - person Stavros Avramidis; 29.05.2017
comment
для имени файла в glob.glob(os.path.join(путь, '*.html')): print os.path.basename(имя файла) - person Michael Lin; 29.05.2017
comment
не забудьте поставить лайк и отметить как ответ, если вы закончили, чтобы знать - person Stavros Avramidis; 29.05.2017

Вы можете использовать:

path = 'C:/Users/.../.../output/'
#read html files
for filename in glob.glob(os.path.join(path, '*.html')):
    soup = bs4.BeautifulSoup(open(filename).read(), "lxml")
    title = soup.find('h1')
    ticker = soup.find('p')
    d_date = soup.find_all('div', {"id": "a-body"})[0].find_all("p")[2]

    try:
        def find_participant(tag):
            return tag.name == 'p' and tag.find("strong", text=re.compile(r"Executives|Corporate Participants"))

        participants = soup.find(find_participant)
        parti_names = ""
        for parti in participants.find_next_siblings("p"):
            if parti.find("strong", text=re.compile(r"(Operator)")):
                break
            parti_names += parti.get_text(strip=True) + ","
    except:
        indexFile = open('C:/Users/.../output1/' + 'index.txt', 'a+')
        indexFile.write(filename + ', ' + title.get_text(strip=True) + ', '+ ticker.get_text(strip=True) + ', ' + d_date.get_text(strip=True) + ', ' + 'No participants' + '\n')
    else:
        participants = soup.find(find_participant)
        parti_names = ""
        for parti in participants.find_next_siblings("p"):
            if parti.find("strong", text=re.compile(r"(Operator)")):
                break
            parti_names += parti.get_text(strip=True) + ","
        indexFile = open('C:/Users/.../output1/' + 'index.txt', 'a+')
        indexFile.write(os.path.basename(filename) + ', ' + title.get_text(strip=True) + ', '+ ticker.get_text(strip=True) + ', ' + d_date.get_text(strip=True) + ', ' + parti_names + '\n')
        indexFile.close()
person Daan Molenaar    schedule 29.05.2017

ntpath — это еще один модуль, используемый для получения базового имени из пути.

>>> import ntpath
>>> ntpath.basename('C:/Users/.../output1/' + 'index.txt')
'index.txt'
person Karthikeyan KR    schedule 29.05.2017