Открытие случайного файла а также его чтение на Python

Вот решил поделиться, как открыть и прочитать случайный файл используя random в Python. Создадим папку Files, в которой будут хранится 2 txt файла, это a.txt и b.txt. Создаём py файл и прописываем следующее

# Импорт модуля random
import random

# Виды ответов, то есть можно понять что выпадет
lists = [file1, file2]

# answer отвечает за выпадение из lists
answer = random.choice(lists)

# read1 отвечает за открытие и чтение 1-го файла, то есть a.txt
def read1():
    file = open(r'files\a.txt', 'r', encoding='utf-8')
    print(*file)
    file.close()

# read2 отвечает за открытие и чтение 2-го файла, то есть b.txt
def read2():
    file = open(r'files\b.txt', 'r', encoding='utf-8')
    print(*file)
    file.close()

# main отвечает за исполнение всего кода
def main():
    # Выполняем answer, то есть что может выпасть из lists
    answer
    # Начинается уже сравнение ответа
    if str(answer) == "file1":
        read1()
    elif str(answer) == "file2":
        read2()
    else:
        print('Выпало другое')

# После чего, уже начинается само исполнение кода
if __name__ == '__main__':
    main()

Совсем забыл что добавить в txt файлы. В a.txt пишем Python выбрал файл 'a.txt'. А в b.txt пишем Python выбрал файл 'b.txt'.


Ответы (1 шт):

Автор решения: Komedik
# Импорт модулей
import random
import os

# Указываем название нужной директории
folder = "asd"

# answer отвечает за выпадение из files
def get_answer():
    files = os.listdir(folder) #Получаем список элементов папки
    file = random.choice(files) #Получение случайного файла из списка
    return file #Возвращаем в значении функции - переменную file

# read отвечает за открытие и чтение файла, который нам выпал
def read(file):
    file = folder+"/"+file #Создание пути к папке
    with open(file, 'r', encoding='utf-8') as f: #Открытие файла
        text=f.read() #Чтение файла
    return text #Возвращаем в значении функции - переменную text

# main отвечает за исполнение всего кода
def main():
    files = os.listdir(folder) #Получаем список элементов папки повторно, чтобы программу не приходилось обновлять каждый раз
    
    if not files: #Если список пуст
        print("Папка пуста")
    else: #Иначе
        try: #Попытаться
            text = read(get_answer()) #Получаем текст файла
            if text == '': #Если текста нет
                print("В файле ничего не написано.")
            else: #Иначе
                print(text)
        except: #Если возникает ошибка
            print("Ошибка!\nВозможно, папка содержит внутри себя другие папки, что не расчитано на код.")

# После чего, уже начинается само исполнение кода
if __name__ == '__main__':
    main()

Исправил ошибки, добавил парочку условий на некоторые ошибки.

→ Ссылка