#python #corpus #file-not-found
#python #corpus #файл не найден
Вопрос:
Я пытаюсь написать код, который обращается к файлам из корпуса под названием Mini-CORE. У меня не было проблем с печатью listdir
и извлечением из них кодов жанра. Однако, когда я пытаюсь получить доступ к самим файлам, чтобы извлечь текст, он выдает мне FileNotFoundError: [Errno 2] No such file or directory: '1 IN EN IN-IN-IN-IN EN-EN-EN-EN WIKI 9990014.txt'
первое имя файла в папке. Итак, я не понимаю, почему он сообщает мне имя файла, если утверждает, что оно не существует? Я только что где-то допустил синтаксическую ошибку?
import os
import re
import spacy
from spacy import displacy
from collections import Counter
nlp = spacy.load('en')
entries = os.listdir('Mini-CORE')
entry_list = []
# this returns the genre codes for each file
def genre_code(filename):
for entry in entries:
regex1 = r'((?<=1 )w*)' # This captures the genre code
genre = re.findall(regex1, entry)
entry_list.append(genre)
genre_code(entries)
print(entry_list)
# FileNotFoundError???
# This captures the text after after the <h> or <p> tags
def relevant_text(filename):
for filename in entries:
with open(filename) as current_file:
text = current_file.read()
regex2 = r'((?<=<h>|<p>).*)'
text2 = re.findall(regex2, text)
print(text2)
print(relevant_text(entries))
Комментарии:
1.
listdir
результаты не включают путь к файлу. Вы хотели бы добавитьos.path.join('Mini-CORE', filename)
к каждому из введенных именentries
.relevant_text()
кажется ошибочным. Вы передаете afilename
, но сразу же перезаписываете его именами файлов изentries
. Это затрудняет написание ответа без распространения этой предполагаемой ошибки.
Ответ №1:
os.listdir
возвращает имя файла без его пути. Вам нужен родительский каталог файла при открытии файла. pathlib
это объектно-ориентированная библиотека путей, которая упрощает передачу путей, не беспокоясь об именах каталогов и путей.
Используйте Path.glob
для перечисления каталога, и возвращаемые пути будут содержать как имя файла, так и его путь, доступные для использования вашей программой. При некоторой очистке ваш код может быть
from pathlib import Path
import re
import spacy
from spacy import displacy
from collections import Counter
nlp = spacy.load('en')
entries = Path('Mini-CORE').glob("*")
# this returns the genre codes for each file
def genre_code(entries):
entry_list = []
for entry in entries:
regex1 = r'((?<=1 )w*)' # This captures the genre code
genre = re.findall(regex1, entry.name)
entry_list.append(genre)
return entry_list
entry_list = genre_code(entries)
print(entry_list)
# This captures the text after after the <h> or <p> tags
def relevant_text(entries):
for filename in entries:
with open(filename) as current_file:
text = current_file.read()
regex2 = r'((?<=<h>|<p>).*)'
text2 = re.findall(regex2, text)
print(text2)
print(relevant_text(entries))