#python
#python
Вопрос:
У меня есть набор чисел, который содержит 2375013 уникальных номеров в текстовом файле. Структура данных выглядит следующим образом:
11009
900221
2
3
4930568
293
102
Я хочу сопоставить число в строке из других данных с набором чисел для извлечения данных, которые мне нужны. Итак, я закодировал так:
6 def get_US_users_IDs(filepath, mode):
7 IDs = []
8 with open(filepath, mode) as f:
9 for line in f:
10 sp = line.strip()
11 for id in sp:
12 IDs.append(id.lower())
13 return IDs
75 IDs = "|".join(get_US_users_IDs('/nas/USAuserlist.txt', 'r'))
76 matcher = re.compile(IDs)
77 if matcher.match(user_id):
78 number_of_US_user = 1
79 text = tweet.split('t')[3]
Но для запуска требуется много времени. Есть ли какая-нибудь идея сократить время выполнения?
Комментарии:
1. Измените способ хранения чисел. Поместите их в базу данных sqlite и проиндексируйте их. Затем используйте SQL для запроса.
2. Действительно, sqlite может быть хорошим решением, если ваши данные не помещаются в память. Здесь это не так (2 миллиона целых чисел занимают менее 20 Мб).
Ответ №1:
Я понял, что у вас есть огромное количество идентификаторов в файле, и вы хотите знать, есть ли в этом файле конкретный идентификатор пользователя.
Вы можете использовать набор python.
fd = open(filepath, mode);
IDs = set(int(id) for id in fd)
...
if user_id in IDs:
number_of_US_user = 1
...
Комментарии:
1. нужно ли мне использовать «set» в этом случае? в наборе чисел уже есть только уникальные номера. Я только что попробовал ваше предложение, но это также занимает много времени …… хм ….. .
2. @MINSUPARK: Вы должны принять этот ответ, щелкнув галочку слева, если ti решил вашу проблему.