Ответы пользователя по тегу Python
  • Как из текстового файла БЫСТРО создать заданное количество файлов с заданным количеством строк Python?

    @kascode
    На мой взгляд лучшим решением будет прочитать большой файл names.txt в list и, соответственно, держать его в памяти.

    Ну а дальше дело техники. Читаем построчно файл с городами. Для каждого города создаём папку с соответствующим именем. В папке файл name.txt. В него осуществяем построчную запись случайной строки из исходного файла с проверкой на дублирование.

    Структуру файла cities.txt я принял такую: [город]|[количество строк для города]
    москва|1000
    санкт-петербург|1100

    __author__ = 'kascode'
    from random import randint
    import os
    
    source = open('names.txt', 'r')
    
    sourcelines = source.readlines()
    sourcelineslen = len(sourcelines)
    
    def readCities():
        with open('cities.txt', 'r') as f:
            citylines = f.readlines()
    
        citieslist = []
        
        # заполняем список данными в формате [['город'], ['число строк']] 
        for line in citylines:
            citieslist.append(line.split('|'))
    
        return citieslist
    
    for city in readCities():
        # создаём папку с именем города
        if not os.path.exists(city[0]):
            os.makedirs(city[0])
    
        file = city[0] + '/name.txt'
        cityout = open(file, 'w')
        written = []        # массив записанных строк
    
        # записываем столько строк, сколько указано для города
        for i in range(1, int(city[1])):
            # берём случайную строку из исходного списка
            sourceline = sourcelines[randint(0, sourcelineslen-1)]
            
            # берём новую пока не найдём не дублирующую
            while sourceline in written:
                sourceline = sourcelines[randint(0, sourcelineslen-1)]
    
            cityout.write(sourceline)
            written.append(sourceline)


    На моей машине обработка файла в 10000000 строк длиной 10-50 символов заняла 0,21с.
    Ответ написан
    Комментировать