python - 如何在 Python 中为具有随机长度和字符顺序的字符串创建搜索词?
问题描述
我想使用 Python 中的twint 工具来搜索包含埃塞俄比亚这个词的所有可能拼写的推文,包括夸大其词,例如 ETHIOOOPIAAAA 和ethioopiaaaa。到目前为止,我已经尝试创建一个搜索词,它是一个字符串,f"e{eth}a"
其中eth
随机长度的字符串介于 0-18 个字符之间,以 e 开头,以 a 结尾,中间有随机的字符顺序,其中的字符是有限的到 e,t,h,i,o,p,a。
我试过用这个:
import random
eth_chars = "ethiopa"
eth = ""
for i in range(0,18):
eth += random.choice(eth_chars)
search_term = f"e{eth}a"
这不起作用,因为它将一个生成的字符串分配给search_term
并搜索该单个术语,但我想搜索任何长度为 0-18 字符的所有可能字符串。遵循此规则:
e - (e,t,h,i,o,p,a 的随机顺序) - a
另外,我需要使查询不区分大小写。我试图.casefold()
在配置像这样的'config.Search = search_term.casefold()'这样的twint时将字符串方法添加到搜索查询中,假设这只会读取字符串并忽略大小写。我不确定这会奏效。
任何帮助将不胜感激。
解决方案
您可以使用itertools.product计算值列表的笛卡尔积,例如获取所有可能的组合。
如果你想保持字母顺序,你需要生成一个这样的组合数组:
[['e', 'E', 'ee', 'eE', 'Ee', 'EE'], ['t', 'T', 'tt', 'tT', 'Tt', 'TT'], ['h', 'H', 'hh', 'hH', 'Hh', 'HH'], ['i', 'I', 'ii', 'iI', 'Ii', 'II'], ['o', 'O', 'oo', 'oO', 'Oo', 'OO'], ['p', 'P', 'pp', 'pP', 'Pp', 'PP'], ['i', 'I', 'ii', 'iI', 'Ii', 'II'], ['a', 'A', 'aa', 'aA', 'Aa', 'AA']]
然后使用以下方法处理所有可能的组合itertools.product
:
import itertools
eth_chars = list("ethiopia")
max_length = 2
combinations = []
for idx,character in enumerate(eth_chars):
char_arr= [] # ['ee','e','E','EE','eE','Ee']
char_arr.append(eth_chars[idx]) #add 'e'
char_arr.append(eth_chars[idx].upper()) #add 'E'
for item in itertools.product(eth_chars[idx] + eth_chars[idx].upper(), repeat=max_length):
char_arr.append("".join(list(item))) #add any combination 'eE', 'EE', 'Ee'
combinations.append(char_arr) # [['ee','e','E','EE','eE','Ee']]
print(combinations)
for element in itertools.product(*combinations):
print("".join(element))
注意 :
- 上面的方法假设您希望字母顺序正确,而不是处理排列
- 仅当 max_length=2 时,它返回 1 679 616 个组合,如果删除大写组合(
eE
和Ee
),您将有 65 536 个组合,如下所示:
import itertools
eth_chars = list("ethiopia")
max_length = 2
combinations = []
for idx,character in enumerate(eth_chars):
char_arr= [] # ['ee','e','E','EE','eE']
for count in range(0,max_length):
char_arr.append(eth_chars[idx]*(count+1))
char_arr.append(eth_chars[idx].upper()*(count+1))
combinations.append(char_arr) # [['ee','e','E','EE']]
for element in itertools.product(*combinations):
print("".join(element))
推荐阅读
- python - 如何使用正则表达式提取文本文件中的特定值并将提取的值保存在另一个文件中?
- c# - c# 翻转列表
转换成字符串并在 Windows 窗体应用程序的标签中显示 - javascript - 固定标题滚动
- python-3.x - device.is_kernel_driver_active() 在 libusb-1.0.22.7z 中不起作用吗?
- reactjs - 使用参数时,React Router Render props 不渲染组件
- python-3.x - 使用“kill -9”命令杀死主进程时,Python子进程不会被杀死
- php - 无法连接到服务器:第 7 行 C:\inetpub\wwwroot\index.php 中的 WIN-71KGFN2PPCC\SQLEXPRESS 连接到 MSSQL 时出现问题
- html - 对齐三个DIV而不折叠DIV内的内容
- python - 例外:APM 模型错误:向量索引问题
- php - 不同的语句用于一次只返回一个唯一的结果mysql