Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 12, 2022 22:20:38

djjec
Зарегистрирован: 2022-11-12
Сообщения: 21
Репутация: +  0  -
Профиль   Отправить e-mail  

Генератор слов из файла большого размера

Здравствуйте.
Помогите нужна программа генератор из текстового файла txt очень большого объёма (примерно 40 гиг)
Задача:
1. взять из файла 2 рандомных слова и совместить их без пробелов ( например взяты слова Коля Маша, на выходе КоляМаша)
2.Возможность повтора этих действий но уже с другими словами (так же рандомно), например указать параметр -N 100000 и тогда будет повтор действий 100000 раз.
3.Возможность добавить самому любое слово которое будет неизменно для всего цикла повторов.
У меня есть для Python 2, но она не может прочитать такой огромный файл.
Вот пример моей программы

import sys
import getopt
import random

#sys.stdout = open('test1.txt','wt')

help_message = '''
Command Exntensions:
-n <x> or --number <x>: Number of sample code phrases given. (Default is 5)
-w <file> or --wordlist <file>: Uses another wordlist to generate code phrases from.
'''

CODEWORDS = open('02.txt', 'r').readlines()

class Usage(Exception):
def __init__(self, msg):
self.msg = msg

def generate(prefix=False, number=5):
while number > 0:
if prefix == 'TRUE':
print ("Not Supported.")
# word1 = PREFIXES[int(random.uniform(0,len(PREFIXES)))]
elif prefix:
word1 = prefix
else:
word1 = CODEWORDS[int(random.uniform(0,len(CODEWORDS)))]
word2 = CODEWORDS[int(random.uniform(0,len(CODEWORDS)))]
print "Моё словоs%s%" % (word1.rstrip(), word2.rstrip())

number -= 1


def main(argv=None):

number = 5
prefix = False

if argv is None:
argv = sys.argv
try:
try:
opts, args = getopt.getopt(argv[1:], "hn:p:i:vw:", ["help", "number=", "prefix=", "wordlist="])
except getopt.error, msg:
raise Usage(msg)

# option processing
for option, value in opts:
if option == "-v":
verbose = True
if option in ("-h", "--help"):
raise Usage(help_message)
if option in ("-n", "--number"):
number = int(value)
if option in ("-w", "--wordlist"):
global CODEWORDS
print "Importing: %s" % value
CODEWORDS = open(value, 'r').readlines()
if option in ("-p", "--prefixe"):

print value

if (value):
prefix = value
else:
prefix = 'TRUE'

generate(prefix, number)

except Usage, err:
print >> sys.stderr, sys.argv[0].split("/")[-1] + ": " + str(err.msg)
print >> sys.stderr, "\t for help use --help"
return 2


if __name__ == "__main__":
sys.exit(main())

Офлайн

#2 Ноя. 12, 2022 23:09:17

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9730
Репутация: +  843  -
Профиль   Отправить e-mail  

Генератор слов из файла большого размера

djjec
У меня есть для Python 2, но она не может прочитать такой огромный файл.
Да её идиот какой-то писал. Использует в одной программе глобальную переменную с подменой её значения где-то в глубине кода и классы для вывода исключений. А проверка значения на строку TRUE - вовсе шедевр.

djjec
У меня есть для Python 2, но она не может прочитать такой огромный файл.
Как она прочитает сорок гигабайт в оперативную память, если у тебя оперативной памяти в компьютере восемь/шестнадцать гигабайт всего?
Этот дебилоид читает всё содержимое файла в оперативную память, хотя можно прекрасно без этого обойтись. Он даже не знает, как правильно строки из файла прочитать все; использует устаревший метод, который устарел там лет двадцать назад примерно. То же самое касается и getopt; уже давно argparse используется везде и про древний getopt можно уже забыть навсегда.

djjec
Помогите нужна программа генератор из текстового файла txt очень большого объёма (примерно 40 гиг)
Придётся тебе разбить этот файл на несколько файлов. Возможно даже, на несколько тысяч файлов. Потом сначала выбирать рандомно файлы, а потом из них выбирать рандомно слова. Тогда оно будет работать за приемлемое время, так как вся скорость ляжет на операционную систему, которая с диском работает и файлы на нём ищет максимально быстро.



Отредактировано py.user.next (Ноя. 12, 2022 23:16:38)

Офлайн

#3 Ноя. 13, 2022 20:00:21

djjec
Зарегистрирован: 2022-11-12
Сообщения: 21
Репутация: +  0  -
Профиль   Отправить e-mail  

Генератор слов из файла большого размера

Так поэтому и прошу тут помощи!
Подскажите где можно взять такой шаблон с теми требованиями что мне нужно?
Этому коду что я скинул много лет! Я не могу нигде найти готовое решение!
У меня Linux и 128Gb оперативки, и к сожалению даже с таким обемом этоа программа не может прочитать файл с 20 гиг.
Всё облазил, уже не знаю к кому и обратится за помощью!
Максимум что нашёл, это что он не читает весь файл и не закидывает в оперативку всё. НО он рандомит только с первых 1000 строк! А нужно чтобы со всех

Офлайн

#4 Ноя. 13, 2022 21:04:49

AD0DE412
Зарегистрирован: 2019-05-12
Сообщения: 1130
Репутация: +  44  -
Профиль   Отправить e-mail  

Генератор слов из файла большого размера

а каким образом у вас получился такой большщй файл
1 байт это один символ предположим одно слово это 10 символов

40000000 символов это сколько слов



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

есчщо

Отредактировано AD0DE412 (Ноя. 13, 2022 21:32:19)

Офлайн

#5 Ноя. 13, 2022 21:12:03

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2586
Репутация: +  60  -
Профиль   Отправить e-mail  

Генератор слов из файла большого размера

Тебе правильно подсказали
Не нужно пытаться проглотить камаз целиком.
Твоя задача получить рандомные слова. Таким образом тебе нужно прежде всего отщипнуть от большого файла
по одной строке, мегабайту, длине - его кучоски в рандомных областях, после чего из полученных мелких кусочков вытянуть по слову и склеить их
посмотри в сторону chunks
https://www.bluebirz.net/en/make-it-chunks/ - это не решение твоей проблемы но наведет на мысли. Я гдето видел примеры можно просто указывать в мегабайтах кучски например содерэимое с 123 по 124 метр.
Итд. В любом случае открывать 40 гиг в память ради двух слов - ето какойто тупизм.
Если реально нужно очень много таких операций то наверное будет правильнее уже разово загнать весь этот файл в какую нить базу данных и стрелять из нее запросами
Какую именно базу выбрать нужно решать по структуре запроса и хранения данных



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#6 Ноя. 13, 2022 21:14:30

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2586
Репутация: +  60  -
Профиль   Отправить e-mail  

Генератор слов из файла большого размера

AD0DE412
а каким образом у вас получился такой большщй файл1 байт это один символ предположим одно слово это 10 символов40000000 символов это сколько слов
ЛОг файл, база адинезы, да много еще где
В наше время 40 гигами уже никого и не удивишь.
Я бы смотрел в сторону как решать данный вопрос со стороны самого файла (в базу кидать) чем на питоне костылить.
Но видимо там какието мамонты а программистов нет которые крутили это все



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#7 Ноя. 13, 2022 21:15:24

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1310
Репутация: +  113  -
Профиль   Отправить e-mail  

Генератор слов из файла большого размера

djjec
взять из файла 2 рандомных слова
проверь как долго будет считать количество строк в большом файле
  
def get_num_line_from_file(file):
    with open(file, 'r') as f:
        cout = 0
        while True:
            if f.readline():
                cout += 1
            else:
                break
    return cout
print(get_num_line_from_file('1.txt'))

Офлайн

#8 Ноя. 13, 2022 21:17:30

djjec
Зарегистрирован: 2022-11-12
Сообщения: 21
Репутация: +  0  -
Профиль   Отправить e-mail  

Генератор слов из файла большого размера

AD0DE412
а каким образом у вас получился такой большщй файл
1 байт это один символ предположим одно слово это 10 символов

40000000 символов это сколько слов
У меня слово из 8 символов, число строк 4294967296 это 16 в 8 степени

Офлайн

#9 Ноя. 13, 2022 21:21:18

djjec
Зарегистрирован: 2022-11-12
Сообщения: 21
Репутация: +  0  -
Профиль   Отправить e-mail  

Генератор слов из файла большого размера

xam1816
проверь как долго будет считать количество строк в большом файле
SyntaxError: invalid syntax

Офлайн

#10 Ноя. 13, 2022 21:23:12

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1310
Репутация: +  113  -
Профиль   Отправить e-mail  

Генератор слов из файла большого размера

djjec
число строк 4294967296
известно число строк, так выбрать случайную строку из них
  
line_num = random.randrange(0, 4294967296)
и уже в ней взять два случайных слова

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version