Как выбрать случайную строку из файла и распечатать ее на python?А что такое AttributeError: __exit__? - PullRequest
0 голосов
/ 17 декабря 2018

Я использую python для школьного проекта, и у меня есть эти два файла:

file = open("Songs.txt","r") 
file = open("Artists.txt","r")

И я хочу выбрать случайного исполнителя из моего файла Artists, а затем распечатать его.

import random
with "Artists.txt":
    ARTIST = random.randint(0,9)
    print(ARTIST)

Он также продолжает отображать AttributeError: exit и говорит:

Traceback (последний вызов был последним): файл "N: \ 1GCSE \ Computing \ Programming Project \ Project.py ", строка 26, с" Artists.txt ": AttributeError: _exit _

Что мне делать?

Ответы [ 2 ]

0 голосов
/ 17 декабря 2018

Проблема заключается в том, что вы используете with.При использовании оператора with необходимо предоставить выполнение, которое возвращает что-то вместе с переменной, определенной как as:

with process as foo:
    do_something

Это оценивает process, вызывает метод __enter__ длявозвращаемое значение (которое называется «защита контекста») и присваивает возвращаемое значение __enter__ переменной foo.После этого выполняется do_something и, независимо от того, что происходит, вызывается метод __exit__ объекта защиты.Подробнее здесь , откуда взято это объяснение.Поэтому вы не можете просто использовать with с вашим именем файла, как вы это делали в своем коде.

Если я правильно понял, ваш файл artist.txt содержит 10 строк с разными исполнителями, и вы пытаетесьслучайным образом выбрать одну из этих строк и распечатать ее.Вы могли бы, например, сделать следующее:

import random

with open('artists.txt', 'r') as file:
    ARTIST = random.randint(0, 9)
    print(file.readlines()[ARTIST])

, который по сути аналогичен

import random

file = open('artists.txt', 'r')
ARTIST = random.randint(0, 9)
print(file.readlines()[ARTIST])
file.close()

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

Это будет читать все строки в вашем файле, помещать их в список, выбирать случайное число от 0 до 9 и печатать объект в списке в этой позиции, давая вам случайного художника изваш файл.

0 голосов
/ 17 декабря 2018

Я предполагаю, что каждая строка в вашем файле txt имеет имя исполнителя.Таким образом, вы должны читать ваш файл построчно, а затем сохранять их в list.Затем выберите элемент списка случайным образом.

Примечание: .readlines() совместимо с python 3x

Вы можете попробовать это:

import random

def read_file():
    with open('file.txt') as fp:
        lines = fp.readlines()
    print(random.choice(lines))
    # If you want to return the randomly picked artist, you can uncomment following code
    # return random.choice(lines)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...