#python #string #list #find
#python #строка #Список #Найти
Вопрос:
Этот код отлично работает, если я работаю с одним текстовым файлом за раз. Но если я раскомментирую последние три строки и прокомментирую инструкцию print для одновременной работы с этим кодом с несколькими файлами, тогда этот код не работает. Он не выдает никаких ошибок, но и не выдает никаких выходных данных!
import pathlib
def extract_text(filename):
start = "#patient_name').val('"
end = "');$('#father_name"
with open(filename, 'rt') as myfile:
text = myfile.read()
return text[text.find(start) len(start):text.rfind(end)]
print(extract_text('new.txt'))
#patients = []
#for filename in pathlib.Path('.').glob('*.txt'):
#patients.append(extract_text(filename))
Это мои временные текстовые файлы со значениями, которые я хочу в нем:
Это результат, если я использую код для одного файла за раз
И это результат, когда я использую этот код для нескольких файлов:
Примечание: этот код написан не полностью мной. Кто-то помог мне ответить на мой последний вопрос о переполнении стека.
У меня есть еще один код, который я получил от geeksforgeeks, но он также не работает.
Комментарии:
1. Вы пытались изменить отступы, чтобы они были правильными?
2. для меня все выглядит нормально, но я не знаю, почему это не работает! Нет ошибки отступа или синтаксической ошибки!!
3. Почему строки тезисов имеют отступ, они должны быть в начале строки.
patients = [] for filename in pathlib.Path('.').glob('*.txt'): patients.append(extract_text(filename))
4. Хорошо, братан, это сработало @Bashi, большое спасибо.. Иногда из-за таких мелочей у тебя возникают проблемы, еще раз спасибо, приятель!!
Ответ №1:
Используйте Glob вместо Pathlib.
import glob
def extract_text(filename):
start = "#patient_name').val('"
end = "');$('#father_name"
with open(filename, 'rt') as myfile:
text = myfile.read()
myfile.close()
return text[text.find(start) len(start):text.rfind(end)]
#using glob for getting all text files instead of Path module
patients = []
for filename in glob.glob('./*.txt'):
print(extract_text(filename))
Это сработает.
Комментарии:
1. Пробовал… Не работает, брат! Я пробовал печатать пациентов, myfile, text, filename, но ничего не работает!!
2. Я обновил, можете ли вы попробовать это.
3. Да, ваш код работает, но результат выводится в формате списка, т.е. [name1, name2, name3, name4]. Но если мы печатаем (extract_text(filename)), то он печатает все имена в формате raw, а также одно имя в одной строке. кстати, большое спасибо за помощь, брат!
4. Да, круто, я отредактировал его и добавил комментарии на случай будущих ссылок.
5. Если это правильно, можете ли вы выбрать правильный ответ для дальнейшего использования. Спасибо.
Ответ №2:
Как сказал @Bashi в комментарии, это была ошибка отступа и окончательный рабочий код здесь
import pathlib
def extract_text(filename):
start = "#patient_name').val('"
end = "');$('#father_name"
with open(filename, 'rt') as myfile:
text = myfile.read()
return text[text.find(start) len(start):text.rfind(end)]
patients = []
for filename in pathlib.Path('.').glob('*.txt'):
print(extract_text(filename))