Как открыть рандомный файл в папке python
Перейти к содержимому

Как открыть рандомный файл в папке python

  • автор:

Случайная строка из файла

Вам доступен текстовый файл lines.txt, состоящий из нескольких строк. Считайте, что он находится в одной папке с вашей программой.
Вам необходимо вывести на экран случайную строку из этого файла. Файл может быть пустым, тогда и выводить ничего не надо.
Подумайте, как это можно сделать, не загружая всех строк файла в память и только один раз «пройдясь» по файлу.

Написал такой код, но пишет, что задача решена неверна.

1 2 3 4 5 6 7
import random f = open('lines.txt', encoding='utf-8') data = f.read() lines = data.split('\n') line = random.randrange(len(lines)) print(lines[line])

Лучшие ответы ( 1 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Случайная строка из файла
Вам доступен текстовый файл lines.txt, состоящий из нескольких строк. Считайте, что он находится в.

Случайная строка из файла
У меня тут файл завалялся на ~8к строк Мне надо из него взять одну случайную строчку, желательно.

Случайная строка из файла
Доброго времени суток, как можно получить случайную строку из текстового файла?

Даны случайная строка и случайная подстрока.Найти в строке все совпадения с шаблоном подстроки.
В этом задании в нашу функцию testRegExp первым параметром передается случайная строка(переменная.

260 / 165 / 54
Регистрация: 03.05.2019
Сообщений: 339

ЦитатаСообщение от _qikert Посмотреть сообщение

не загружая всех строк файла в память

Потому что вы загрузили.
В первую очередь приходит на ум предположить количество строк, если выбраное число будет больше, то вывести последнюю строку:

1 2 3 4 5 6 7 8
n = random.randint(0, 10) n = 1 for i, line in enumerate(open('data.txt')): if i == n: print(line, end = '') break if n > i: print(line)

Эксперт Python

7651 / 4098 / 1791
Регистрация: 27.03.2020
Сообщений: 6,913
_qikert,
Не вставляется ссылка

1 2 3 4
def count_lines(filename, chunk_size=113): with open(filename) as file: return sum(chunk.count('\n') for chunk in iter(lambda: file.read(chunk_size), ''))

Идея в том, что считываются не строки, а символы переноса строк. Память не грузится строками.
Регистрация: 30.12.2019
Сообщений: 42

1 2 3 4
f = open('lines.txt', encoding='utf8') text = f.readlines() if text: self.lineEdit.setText(choice(text))

во вложениях эта же задача только на pyqt5, мало ли кому пригодится
Вложения

Documents.rar (827 байт, 262 просмотров)

Эксперт Python

7651 / 4098 / 1791
Регистрация: 27.03.2020
Сообщений: 6,913
On1yOne, readlines считывает весь файл, что не проходит по условию

Эксперт Python

5415 / 3839 / 1214
Регистрация: 28.10.2013
Сообщений: 9,554
Записей в блоге: 1

ЦитатаСообщение от Gdez Посмотреть сообщение

Идея в том, что считываются не строки, а символы переноса строк.
Ты же все равно считываешь строки. По 8 kb за раз. Так что невелика разница с readlines.

Эксперт Python

7651 / 4098 / 1791
Регистрация: 27.03.2020
Сообщений: 6,913

Garry Galler, я просто предложил вариант без считывания именно всего файла. По идее еще как вариант решение — считывание с последней строки со «случайным перескоком» вверх

Эксперт Python

5415 / 3839 / 1214
Регистрация: 28.10.2013
Сообщений: 9,554
Записей в блоге: 1

ЦитатаСообщение от Gdez Посмотреть сообщение

я просто предложил вариант без считывания именно всего файла
Тогда в чем разница с обычным подсчетом строк — без всяких усложнений?

1 2 3 4 5 6 7 8 9 10 11 12
>>> open("test.txt","w").write("one\ntwo\nthree\nfour\nfive") 23 >>> print(open("test.txt").read()) # просто выводим для проверки one two three four five >>> # считаем итеративно >>> sum(1 for _ in open("test.txt")) 5 >>>

Эксперт Python

7651 / 4098 / 1791
Регистрация: 27.03.2020
Сообщений: 6,913

Garry Galler, насколько я понял — задача — решение проблемы при считывании (предварительном выборочном просмотре) очень больших файлов с ограничением по времени и памяти.
Если ошибся в логике постановки задачи, то прошу извинить.

Эксперт Python

5415 / 3839 / 1214
Регистрация: 28.10.2013
Сообщений: 9,554
Записей в блоге: 1

Я к тому, что вариант из моего поста — делает тоже самое, только проще. Считает число строк без загрузки всего файла в память.
Правда, как это поможет выбрать случайную строку — не представляю.

Эксперт Python

7651 / 4098 / 1791
Регистрация: 27.03.2020
Сообщений: 6,913

Garry Galler, парсингом не занимался. Но может по указателям можно как то «выхватывать». Типа прочитать строку номер такую то

Эксперт Python

5415 / 3839 / 1214
Регистрация: 28.10.2013
Сообщений: 9,554
Записей в блоге: 1

ЦитатаСообщение от Gdez Посмотреть сообщение

задача — решение проблемы при считывании (предварительном выборочном просмотре) очень больших файлов с ограничением по времени и памяти.

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

Добавлено через 13 минут
P.S. Из тех, кто эту задачу выкладывал, я не видел, чтобы хоть кто-нибудь отписался какой вообще вариант приняла тестирующая система.
На стековерфлоу люди вообще решают ее простым итеративным считыванием строк в список
Так что, может быть задача вообще не предполагает никаких подвохов и под «не загружая всех строк файла в память» понимается просто не использованием метода read().
А у ТС он как раз применен.

Добавлено через 9 минут
Впрочем, есть еще извращенный вариант с os.path.getsize(filepath), бесконечным циклом while и переустановкой file.seek.
Но при этом получаем не просто случайную строку по номеру, а случайную подстроку с рандомной байтовой позиции.
Вот и пойми эти дебильные задачи из методичек — чего именно хотел автор самой задачи?

Осваиваем Python 3 — работа с файлами

В этой статье мы рассмотрим операции с файлами в Python. Открытие файла Python. Чтение из файла Python. Запись в файл Python, закрытие файла. А также методы, предназначенные для работы с файлами.

Работа с файлами питон — что такое файл Python?

Файл – это именованная область диска, предназначенная для длительного хранения данных в постоянной памяти (например, на жёстком диске).

Чтобы прочитать или записать данные в файл, сначала нужно его открыть. После окончания работы файл необходимо закрыть, чтобы освободить связанные с ним ресурсы.

Поэтому в Python операции с файлами выполняются в следующем порядке:

  1. Открытие файла Python.
  2. Чтение из файла Python или запись в файл Python (выполнение операции).
  3. Закрытие файла Python.

Открытие файла Python

Не знаете как открыть файл в питоне? В Python есть встроенная функция open(), предназначенная для открытия файла. Она возвращает объект, который используется для чтения или изменения файла.

>>> f = open("test.txt") # открыть файл в текущей папке >>> f = open("C:/Python33/README.txt") # указание полного пути

При этом можно указать необходимый режим открытия файла: ‘r’- для чтения,’w’ — для записи,’a’ — для изменения. Мы также можем указать, хотим ли открыть файл в текстовом или в бинарном формате.

По умолчанию файл открывается для чтения в текстовом режиме. При чтении файла в этом режиме мы получаем строки.

В бинарном формате мы получим байты. Этот режим используется для чтения не текстовых файлов, таких как изображения или exe-файлы.

Открытие файла Python- возможные режимы
Режим Описание
‘r’ Открытие файла для чтения. Режим используется по умолчанию.
‘w’ Открытие файла для записи. Режим создаёт новый файл, если он не существует, или стирает содержимое существующего.
‘x’ Открытие файла для записи. Если файл существует, операция заканчивается неудачей (исключением).
‘a’ Открытие файла для добавления данных в конец файла без очистки его содержимого. Этот режим создаёт новый файл, если он не существует.
‘t’ Открытие файла в текстовом формате. Этот режим используется по умолчанию.
‘b’ Открытие файла в бинарном формате.
‘+’ Открытие файла для обновления (чтения и записи).
f = open("test.txt") # эквивалент 'r' или 'rt' f = open("test.txt",'w') # запись в текстовом режиме f = open("img.bmp",'r+b') # чтение и запись в бинарном формате

В отличие от других языков программирования, в Python символ ‘a’ не подразумевает число 97, если оно не закодировано в ASCII (или другой эквивалентной кодировке).

Кодировка по умолчанию зависит от платформы. В Windows – это ‘cp1252’, а в Linux ‘utf-8’.

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

f = open("test.txt",mode = 'r',encoding = 'utf-8')

Как закрыть файл в Python?

Закрытие освободит ресурсы, которые были связаны с файлом. Это делается с помощью метода close(), встроенного в язык программирования Python.

В Python есть сборщик мусора, предназначенный для очистки ненужных объектов, Но нельзя полагаться на него при закрытии файлов.

f = open("test.txt",encoding = 'utf-8') # выполнение операций с файлом f.close()

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

Более безопасный способ – использование блока try. finally.

try: f = open("test.txt",encoding = 'utf-8') # выполнение операций с файлом finally: f.close()

Это гарантирует правильное закрытие файла даже после возникновения исключения, прерывающего выполнения программы.

Также для закрытия файла можно использовать конструкцию with. Оно гарантирует, что файл будет закрыт при выходе из блока with. При этом не нужно явно вызывать метод close(). Это будет сделано автоматически.

with open("test.txt",encoding = 'utf-8') as f: # выполнение операций с файлом

Запись в файл Python

Чтобы записать данные в файл в Python, нужно открыть его в режиме ‘w’, ‘a’ или ‘x’. Но будьте осторожны с режимом ‘w’. Он перезаписывает файл, если то уже существует. Все данные в этом случае стираются.

Запись строки или последовательности байтов (для бинарных файлов) осуществляется методом write(). Он возвращает количество символов, записанных в файл.

with open("test.txt",'w',encoding = 'utf-8') as f: f.write("my first filen") f.write("This filenn") f.write("contains three linesn")

Эта программа создаст новый файл ‘test.txt’. Если он существует, данные файла будут перезаписаны. При этом нужно добавлять символы новой строки самостоятельно, чтобы разделять строки.

Чтение из файла Python

Чтобы осуществить чтение из файла Python, нужно открыть его в режиме чтения. Для этого можно использовать метод read(size), чтобы прочитать из файла данные в количестве, указанном в параметре size. Если параметр size не указан, метод читает и возвращает данные до конца файла.

>>> f = open("test.txt",'r',encoding = 'utf-8') >>> f.read(4) # чтение первых 4 символов 'This' >>> f.read(4) # чтение следующих 4 символов ' is ' >>> f.read() # чтение остальных данных до конца файла 'my first filenThis filencontains three linesn' >>> f.read() # дальнейшие попытки чтения возвращают пустую строку ''

Метод read() возвращает новые строки как ‘n’. Когда будет достигнут конец файла, при дальнейших попытках чтения мы получим пустые строки.

Чтобы изменить позицию курсора в текущем файле, используется метод seek(). Метод tell() возвращает текущую позицию курсора (в виде количества байтов).

>>> f.tell() # получаем текущую позицию курсора в файле 56 >>> f.seek(0) # возвращаем курсор в начальную позицию 0 >>> print(f.read()) # читаем весь файл This is my first file This file contains three lines

Мы можем прочитать файл построчно в цикле for.

>>> for line in f: . print(line, end = '') . This is my first file This file contains three lines

Извлекаемые из файла строки включают в себя символ новой строки ‘n’. Чтобы избежать вывода, используем пустой параметр end метода print(),.

Также можно использовать метод readline(), чтобы извлекать отдельные строки. Он читает файл до символа новой строки.

>>> f.readline() 'This is my first filen' >>> f.readline() 'This filen' >>> f.readline() 'contains three linesn' >>> f.readline() ''

Метод readlines() возвращает список оставшихся строк. Все эти методы чтения возвращают пустую строку, когда достигается конец файла.

>>> f.readlines() ['This is my first filen', 'This filen', 'contains three linesn']

Python работа с файлами — основные методы

Ниже приводится полный список методов для работы с файлами в текстовом режиме.

Python работа с файлами — методы
Метод Описание
close() Закрытие файла. Не делает ничего, если файл закрыт.
detach() Отделяет бинарный буфер от TextIOBase и возвращает его.
fileno() Возвращает целочисленный дескриптор файла.
flush() Вызывает сброс данных (запись на диск) из буфера записи файлового потока.
isatty() Возвращает значение True, если файловый поток интерактивный.
read(n) Читает максимум n символов из файла. Читает до конца файла, если значение отрицательное или None.
readable() Возвращает значение True, если из файлового потока можно осуществить чтение.
readline(n=-1) Читает и возвращает одну строку из файла. Читает максимум n байт, если указано соответствующее значение.
readlines(n=-1) Читает и возвращает список строк из файла. Читает максимум n байт/символов, если указано соответствующее значение.
seek(offset,from=SEEK_SET) Изменяет позицию курсора.
seekable() Возвращает значение True, если файловый поток поддерживает случайный доступ.
tell() Возвращает текущую позицию курсора в файле.
truncate(size=None) Изменяет размер файлового потока до size байт. Если значение size не указано, размер изменяется до текущего положения курсора.
writable() Возвращает значение True, если в файловый поток может производиться запись.
write(s) Записывает строки s в файл и возвращает количество записанных символов.
writelines(lines) Записывает список строк lines в файл.

Рандомный выбор файла

Рандомный выбор данных
Помогите пожалуйста, две недели мучаюсь, не могу перемешать ответы. Тест берется из файла. .

Как достать из json файла рандомный трек?
Всем привет! Я запарсил сайт яндекс музыки и закинул ссылки на треки в json файл Мне нужно чтобы.

Заполнение файла и рандомный выбор строки
Всем привет. Задача: Составить программу, которая в файл, где уже существуют записи будет.

Как сделать рандомный выбор файла из папки?
Есть такой код <?php $d = opendir("Z:\home\postucoz\www\data\news"); while ($name =.

Рандомный выбор из файла: считать данные из txt
Есть такое задание: Задан файл в котором записаны Ф.И.О. Требуется рандомно выбрать из этого.

Am I evil? Yes, I am!

Эксперт PythonЭксперт Java

18968 / 9663 / 2710
Регистрация: 21.10.2017
Сообщений: 21,473

Лучший ответ

Сообщение было отмечено NedoPy как решение

Решение

choise() возвращает ОДИН случайный элемент из списка.
Как ты думаешь, в чем смысл тогда

ЦитатаСообщение от NedoPy Посмотреть сообщение

Файлы в python, ввод-вывод

Эта статья посвящена работе с файлами (вводу/выводу) в Python: открытие, чтение, запись, закрытие и другие операции.

Файлы Python

Файл — это всего лишь набор данных, сохраненный в виде последовательности битов на компьютере. Информация хранится в куче данных (структура данных) и имеет название «имя файла» (filename).

В Python существует два типа файлов:

Текстовые файлы

Это файлы с человекочитаемым содержимым. В них хранятся последовательности символов, которые понимает человек. Блокнот и другие стандартные редакторы умеют читать и редактировать этот тип файлов.

Текст может храниться в двух форматах: ( .txt ) — простой текст и ( .rtf ) — «формат обогащенного текста».

Бинарные файлы

В бинарных файлах данные отображаются в закодированной форме (с использованием только нулей (0) и единиц (1) вместо простых символов). В большинстве случаев это просто последовательности битов.

Они хранятся в формате .bin .

Любую операцию с файлом можно разбить на три крупных этапа:

  1. Открытие файла
  2. Выполнение операции (запись, чтение)
  3. Закрытие файла

Открытие файла

Метод open()

В Python есть встроенная функция open() . С ее помощью можно открыть любой файл на компьютере. Технически Python создает на его основе объект.

f = open(file_name, access_mode) 
  • file_name = имя открываемого файла
  • access_mode = режим открытия файла. Он может быть: для чтения, записи и т. д. По умолчанию используется режим чтения ( r ), если другое не указано. Далее полный список режимов открытия файла

Пример

Создадим текстовый файл example.txt и сохраним его в рабочей директории.

Текстовый файл пример

Следующий код используется для его открытия.

f = open('example.txt','r') # открыть файл из рабочей директории в режиме чтения fp = open('C:/xyz.txt','r') # открыть файл из любого каталога 

В этом примере f — переменная-указатель на файл example.txt .

Следующий код используется для вывода содержимого файла и информации о нем.

>>> print(*f) # выводим содержимое файла This is a text file. >>> print(f) # выводим объект _io.TextIOWrapper name='example.txt' mode='r' encoding='cp1252'> 

Стоит обратить внимание, что в Windows стандартной кодировкой является cp1252 , а в Linux — utf-08 .

Закрытие файла

Метод close()

После открытия файла в Python его нужно закрыть. Таким образом освобождаются ресурсы и убирается мусор. Python автоматически закрывает файл, когда объект присваивается другому файлу.

Существуют следующие способы:

Способ №1

Проще всего после открытия файла закрыть его, используя метод close() .

f = open('example.txt','r') # работа с файлом f.close() 

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

Способ №2

Также можно написать try/finally , которое гарантирует, что если после открытия файла операции с ним приводят к исключениям, он закроется автоматически.

Без него программа завершается некорректно.

Вот как сделать это исключение:

f = open('example.txt','r') try: # работа с файлом finally: f.close() 

Файл нужно открыть до инструкции try , потому что если инструкция open сама по себе вызовет ошибку, то файл не будет открываться для последующего закрытия.

Этот метод гарантирует, что если операции над файлом вызовут исключения, то он закроется до того как программа остановится.

Способ №3

Инструкция with

Еще один подход — использовать инструкцию with , которая упрощает обработку исключений с помощью инкапсуляции начальных операций, а также задач по закрытию и очистке.

В таком случае инструкция close не нужна, потому что with автоматически закроет файл.

Вот как это реализовать в коде.

with open('example.txt') as f: # работа с файлом 

Чтение и запись файлов в Python

В Python файлы можно читать или записывать информацию в них с помощью соответствующих режимов.

Функция read()

Функция read() используется для чтения содержимого файла после открытия его в режиме чтения ( r ).

Синтаксис

file.read(size) 
  • file = объект файла
  • size = количество символов, которые нужно прочитать. Если не указать, то файл прочитается целиком.

Пример

>>> f = open('example.txt','r') >>> f.read(7) # чтение 7 символов из example.txt 'This is ' 

Интерпретатор прочитал 7 символов файла и если снова использовать функцию read() , то чтение начнется с 8-го символа.

>>> f.read(7) # чтение следующих 7 символов ' a text' 

Функция readline()

Функция readline() используется для построчного чтения содержимого файла. Она используется для крупных файлов. С ее помощью можно получать доступ к любой строке в любой момент.

Пример

Создадим файл test.txt с нескольким строками:

This is line1. This is line2. This is line3. 

Посмотрим, как функция readline() работает в test.txt .

>>> x = open('test.txt','r') >>> x.readline() # прочитать первую строку This is line1. >>> x.readline(2) # прочитать вторую строку This is line2. >>> x.readlines() # прочитать все строки ['This is line1.','This is line2.','This is line3.'] 

Обратите внимание, как в последнем случае строки отделены друг от друга.

Функция write()

Функция write() используется для записи в файлы Python, открытые в режиме записи.

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

Синтаксис

file.write(string) 

Пример

Предположим, файла xyz.txt не существует. Он будет создан при попытке открыть его в режиме чтения.

>>> f = open('xyz.txt','w') # открытие в режиме записи >>> f.write('Hello \n World') # запись Hello World в файл Hello World >>> f.close() # закрытие файла 

Переименование файлов в Python

Функция rename()

Функция rename() используется для переименовывания файлов в Python. Для ее использования сперва нужно импортировать модуль os.

import os os.rename(src,dest) 
  • src = файл, который нужно переименовать
  • dest = новое имя файла

Пример

>>> import os >>> # переименование xyz.txt в abc.txt >>> os.rename("xyz.txt","abc.txt") 

Текущая позиция в файлах Python

В Python возможно узнать текущую позицию в файле с помощью функции tell() . Таким же образом можно изменить текущую позицию командой seek() .

Пример

>>> f = open('example.txt') # example.txt, который мы создали ранее >>> f.read(4) # давайте сначала перейдем к 4-й позиции This >>> f.tell() # возвращает текущую позицию 4 >>> f.seek(0,0) # вернем положение на 0 снова 

Методы файла в Python

file.close() закрывает открытый файл
file.fileno() возвращает целочисленный дескриптор файла
file.flush() очищает внутренний буфер
file.isatty() возвращает True, если файл привязан к терминалу
file.next() возвращает следующую строку файла
file.read(n) чтение первых n символов файла
file.readline() читает одну строчку строки или файла
file.readlines() читает и возвращает список всех строк в файле
file.seek(offset[,whene]) устанавливает текущую позицию в файле
file.seekable() проверяет, поддерживает ли файл случайный доступ. Возвращает True , если да
file.tell() возвращает текущую позицию в файле
file.truncate(n) уменьшает размер файл. Если n указала, то файл обрезается до n байт, если нет — до текущей позиции
file.write(str) добавляет строку str в файл
file.writelines(sequence) добавляет последовательность строк в файл

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *