Использование циклов для записи случайных строк txt файла в другой (python)

Я написал функцию, которая будет принимать параметры, размер и текстовый файл, в который вы хотите записать случайные данные (например, data.txt). Я хочу, чтобы эта функция открывала большой текстовый файл; sampleData.txt и прочитайте каждую строку, затем все прочитанные строки запишите в новый текстовый файл, x количество (размер) случайных строк. Вот мой код, в настоящее время он записывает только одну случайную строку в каждый файл вместо «размера» количества строк.

import random

def buildData(size, writetoFile):
    count = 0
    with open('sampleData.txt') as f:
        content = f.readlines()
    while count != size+1:
        randline = random.choice(content)
        with open(writetoFile, 'w') as w:
            w.write(randline)
        count += 1
    f.close()

if __name__ == '__main__':
    # enter size of datset and name to write it to the txt file
    buildData(100, 'dataGen/100.txt')
    buildData(300, 'dataGen/300.txt')
    buildData(700, 'dataGen/700.txt')
    buildData(1500, 'dataGen/1500.txt')
    buildData(4000, 'dataGen/4000.txt')
Анализ настроения постов в Twitter с помощью Python, Tweepy и Flair
Анализ настроения постов в Twitter с помощью Python, Tweepy и Flair
Анализ настроения текстовых сообщений может быть настолько сложным или простым, насколько вы его сделаете. Как и в любом ML-проекте, вы можете выбрать...
7 лайфхаков для начинающих Python-программистов
7 лайфхаков для начинающих Python-программистов
В этой статье мы расскажем о хитростях и советах по Python, которые должны быть известны разработчику Python.
Установка Apache Cassandra на Mac OS
Установка Apache Cassandra на Mac OS
Это краткое руководство по установке Apache Cassandra.
Сертификатная программа "Кванты Python": Бэктестер ансамблевых методов на основе ООП
Сертификатная программа "Кванты Python": Бэктестер ансамблевых методов на основе ООП
В одном из недавних постов я рассказал о том, как я использую навыки количественных исследований, которые я совершенствую в рамках программы TPQ...
Создание персонального файлового хранилища
Создание персонального файлового хранилища
Вы когда-нибудь хотели поделиться с кем-то файлом, но он содержал конфиденциальную информацию? Многие думают, что электронная почта безопасна, но это...
Создание приборной панели для анализа данных на GCP - часть I
Создание приборной панели для анализа данных на GCP - часть I
Недавно я столкнулся с интересной бизнес-задачей - визуализацией сбоев в цепочке поставок лекарств, которую могут просматривать врачи и...
1
0
26
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Вы можете использовать random.sample(), чтобы получить подмножество списка фиксированного размера. Кстати, вам не нужно использовать f.close(), когда вы используете контекстный менеджер для открытия файла (with open(...) as f), потому что это то, для чего предназначен этот оператор with, он автоматически закрывает открытый файл, как только эта часть кода с отступом завершенный.

def buildData(size, writetoFile):
    with open('out.txt') as f:
        content = f.readlines()
    randlines = random.sample(content, size)
    with open(writetoFile, 'w') as w:
        w.writelines(randlines)

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

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