Как прочитать случайный символ из обычного текстового файла

Я не знаю, как читать случайный символ из текстового файла, и хотел бы научиться.

Вот что случилось, когда я начал возиться с python! Я знаю, что буду делать что-то подобное позже в школе, поэтому я тренируюсь. Как вы увидите, чтения строки недостаточно — я открыт для советов и просто прямого ответа, поскольку я понимаю, что мой код очень небрежный. Raspberry Pi с этим кодом работает под управлением Raspbian lite с несколькими дополнительными битами (графический интерфейс, бездействие) и работает под управлением Python 3.5.3.

Я пишу некоторые из них в текстовый файл:

f = open("selected.txt","w")
chars = 'abcdefghijklmnopqrstuvwxyz'
ucchars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
smbls = '`¬!"£$%^&*()-_=+{[}]:;@~#<,>.?'
nos = '1234567890'
space = ' '

Так:

usechars = input('Use lower case letters? answer y or n.')
if usechars == 'y':
    f.write(chars)
useucchars = input('Use upper case letters? answer y or n.')
if useucchars == 'y':
    f.write(ucchars)
usesmbls = input('Use symbols? answer y or n.')
if usesmbls == 'y':
    f.write(smbls)
usenos = input('Use numbers 0-9? answer y or n.')
if usenos == 'y':
    f.write(nos)
usespace = input('Use spaces? answer y or n.')
if usespace == 'y':
    f.write(space)

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

ОБНОВИТЬ вот код:

f.close()
with open("selected.txt","r") as f:
    contents = f.read
random_character = random.choice(contents)
for i in range(amnt):
    password = ''
    for c in range(length):
        password += random_character
    print(password)

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

chthonicdaemon 09.04.2019 19:37
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
1
530
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если файл не очень большой, простой способ выбрать случайный символ — сначала прочитать его в строку, а затем просто выбрать случайный символ из строки:

import random

with open("selected.txt", "r") as f:
    contents = f.read()  # NOTE the () after read

random_character = random.choice(contents)
print("The random character I've chosen is: ", random_character)

Если вы хотите создать строку со случайным выбором, вы можете использовать цикл for, но вы должны выбрать новый случайный символ внутри цикла:

with open("selected.txt","r") as f:
    contents = f.read()

password = ''
for i in range(amnt):
    random_character = random.choice(contents)
    for c in range(length):
        password += random_character
print(password)

Я получаю сообщение об ошибке. Вероятно, это моя голая установка Python, но это может быть и мой код Traceback (most recent call last): File "/home/pi/password.py", line 33, in <module> random_character = random.choice(contents) File "/usr/lib/python3.5/random.py", line 262, in choice i = self._randbelow(len(seq)) TypeError: object of type 'builtin_function_or_method' has no len()

Jeremy 09.04.2019 17:33

Я подозреваю, что у вас есть f.read вместо f.read() (с скобками) в вашем коде.

chthonicdaemon 09.04.2019 18:16

Действительно, это можно увидеть в строке 2 последнего блока кода в ОП.

bart cubrich 09.04.2019 18:35

Другие вопросы по теме