- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我的编程能力很弱。我需要根据以下逻辑过滤数据数组,但我不明白该怎么做。可以使用“while”循环,但我认为这会花费很多时间,因为数组非常大。
我有非常大的打印机阵列驱动程序:
[...
{"PPD_NAME": "HP PSC 2500 Series, hpcups 3.18.5 (en)", "PPD_PATH": "hplip:4/ppd/hplip/HP/hp-psc_2500_series.ppd"},
{"PPD_NAME": "HP LaserJet m3035 MFP hpijs pcl3, 3.18.5 (en)", "PPD_PATH": "drv:///hpijs.drv/hp-laserjet_m3035_mfp-pcl3-hpijs.ppd"},
{"PPD_NAME": "HP LaserJet m2727 MFP pcl3, hpcups 3.18.5 (en)", "PPD_PATH": "drv:///hpcups.drv/hp-laserjet_m2727_mfp-pcl3.ppd"}
...]
并有字符串(名称打印机):
"HP HP LaserJet m2727 Multifunction Printer"
我想按单词拆分字符串,并按每个单词过滤数组,直到出现“None”。
示例:
循环 1:单词:“HP”
结果:
{"PPD_NAME": "HP PSC 2500 系列,hpcups 3.18.5 (en)", "PPD_PATH": "hplip:4/ppd/hplip/HP/hp-psc_2500_series.ppd"},
{“PPD_NAME”:“HP LaserJet m3035 MFP hpijs pcl3,3.18.5(en)”,“PPD_PATH”:“drv:///hpijs.drv/hp-laserjet_m3035_mfp-pcl3-hpijs.ppd”},
{“PPD_NAME”:“HP LaserJet m2727 MFP pcl3,hpcups 3.18.5(en)”,“PPD_PATH”:“drv:///hpcups.drv/hp-laserjet_m2727_mfp-pcl3.ppd”}
循环2:单词:“LaserJet”
结果:
{"PPD_NAME": "HP LaserJet m3035 MFP hpijs pcl3, 3.18.5 (en)", "PPD_PATH": "drv:///hpijs.drv/hp-laserjet_m3035_mfp-pcl3-hpijs.ppd"},
{“PPD_NAME”:“HP LaserJet m2727 MFP pcl3,hpcups 3.18.5(en)”,“PPD_PATH”:“drv:///hpcups.drv/hp-laserjet_m2727_mfp-pcl3.ppd”}
循环 3:单词:“m2727”
结果:
{"PPD_NAME": "HP LaserJet m2727 MFP pcl3, hpcups 3.18.5 (en)", "PPD_PATH": "drv:///hpcups.drv/hp-laserjet_m2727_mfp-pcl3.ppd"}
循环 4:单词:“多功能”
结果:无
我想获得最后一次迭代不是“None”的第一个对象: {"PPD_NAME": "HP LaserJet m2727 MFP pcl3, hpcups 3.18.5 (en)",{...}}
前提是结果为“无”或单词已完成。如何在 python 上制作类似的过滤器?有人吗?:
for word in ArgInListFindNewPrinters['PRINTER_INFO'].split():
name = next(name for name in ListPrinterDriver if re.search(word, str(name), re.IGNORECASE))
print name
但它并没有像我预期的那样工作。
编辑:我的结果较低。该脚本在 CUPS(可用打印机)中搜索打印机并添加它。如果可以以某种方式优化,我将不胜感激。
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import requests
import json
import sys
from bs4 import BeautifulSoup
import re
def GetFindNewPrinters(cookie):
headers = {}
headers["Cookie"] = 'org.cups.sid='+cookie["org.cups.sid"]
FromData = {}
FromData["OP"] = 'find-new-printers'
FromData["org.cups.sid"] = cookie["org.cups.sid"]
Responce = requests.post(url, headers=headers, data=FromData)
soup = BeautifulSoup(Responce.content.decode('utf-8'), 'html.parser')
ListFindNewPrinters = []
for id, link in enumerate(soup.find_all('form')):
ListFindNewPrinters.append({'TEMPLATE_NAME': link.find("input", {"name":"TEMPLATE_NAME"})['value']})
ListFindNewPrinters[id]['DEVICE_URI'] = link.find("input", {"name":"DEVICE_URI"})['value']
ListFindNewPrinters[id]['PRINTER_LOCATION'] = link.find("input", {"name":"PRINTER_LOCATION"})['value']
ListFindNewPrinters[id]['PRINTER_INFO'] = link.find("input", {"name":"PRINTER_INFO"})['value']
return ListFindNewPrinters
def GetPrinterDrivers(cookie,PRINTER_NAME,PRINTER_INFO,PRINTER_LOCATION,DEVICE_URI):
headers = {}
headers["Cookie"] = 'org.cups.sid='+cookie["org.cups.sid"]
FromData = {}
FromData["OP"] = 'add-printer'
FromData["org.cups.sid"] = cookie["org.cups.sid"]
FromData["PRINTER_IS_SHARED"] = 'on'
FromData["PRINTER_LOCATION"] = PRINTER_LOCATION
FromData["PRINTER_INFO"] = PRINTER_INFO
FromData["PRINTER_NAME"] = PRINTER_NAME
FromData["DEVICE_URI"] = DEVICE_URI
FromData["PPD_MAKE"] = PRINTER_INFO.split(' ', 1)[0]
FromData["PPD_FILE"] = '(binary)'
Responce = requests.post(url, headers=headers, data=FromData)
soup = BeautifulSoup(Responce.content.decode('utf-8'), 'html.parser')
ListPrinterDriver = []
for id, link in enumerate(soup.find_all('option')):
ListPrinterDriver.append({'PPD_PATH': link['value']})
ListPrinterDriver[id]['PPD_NAME'] = link.next.replace("\n","")
return ListPrinterDriver
def FindInArrayByWord(ArrayDrivers,PrinterName):
if ArrayDrivers == []:
return None
for word in PrinterName.split():
if FindInArray(ArrayDrivers,word) == []:
break
else:
ArrayDrivers = FindInArray(ArrayDrivers,word)
return ArrayDrivers[0]
def AddPrinter(cookie,PRINTER_NAME,PRINTER_INFO,PRINTER_LOCATION,DEVICE_URI,PPD_NAME):
headers = {}
headers["Cookie"] = 'org.cups.sid='+cookie["org.cups.sid"]
FromData = {}
FromData["org.cups.sid"] = cookie["org.cups.sid"]
FromData["OP"] = 'add-printer'
FromData["printer_name"] = PRINTER_NAME
FromData["PRINTER_NAME"] = PRINTER_NAME
FromData["PRINTER_INFO"] = PRINTER_INFO
FromData["PRINTER_LOCATION"] = PRINTER_LOCATION
FromData["DEVICE_URI"] = DEVICE_URI
FromData["PRINTER_IS_SHARED"] = 'on'
FromData["PPD_NAME"] = PPD_NAME
FromData["MAX_FILE_SIZE"] = '262144'
FromData["PPD_FILE"] = '(binary)'
Responce = requests.post(url, headers=headers, data=FromData)
return Responce
def AddPrinterOptions(cookie,PRINTER_NAME):
headers = {}
headers["Cookie"] = 'org.cups.sid='+cookie["org.cups.sid"]
FromData = {}
FromData["org.cups.sid"] = cookie["org.cups.sid"]
FromData["PRINTER_NAME"] = PRINTER_NAME
FromData["OP"] = 'set-printer-options'
FromData["PageSize"] = 'A4'
FromData["PageSize.Width"] = '0'
FromData["PageSize.Height"] = '0'
FromData["PageSize.Units"] = 'pt'
FromData["Duplex"] = 'None'
FromData["job_sheets_start"] = 'none'
FromData["job_sheets_end"] = 'none'
FromData["printer_error_policy"] = 'retry-job'
FromData["printer_op_policy"] = 'default'
Responce = requests.post(url, headers=headers, data=FromData)
return Responce
def FindInArray(Array,Arg,*args):
ArrayObject = None
NewArray = []
if len(args) != 0:
for ArrayObjectName in args:
try:
ArrayObject = [name for name in Array if re.search(Arg, name[ArrayObjectName], re.IGNORECASE)]
except StopIteration: pass
else:
try:
ArrayObject = [name for name in Array if re.search(Arg, str(name), re.IGNORECASE)]
except StopIteration: pass
return ArrayObject
def main():
# Check connection
try:
Responce = requests.get(url, timeout=10)
except requests.exceptions.RequestException as e:
print e
sys.exit(-1)
# Get list available printers in CUPS, and find. Else add printer with specific destination.
if sys.argv[3] != 'False':
ArgPrinterIP = sys.argv[3]
ArgInListFindNewPrinters = {}
ArgInListFindNewPrinters["TEMPLATE_NAME"] = ArgPrinter.replace(" ", "_")
ArgInListFindNewPrinters["PRINTER_INFO"] = ArgPrinter
ArgInListFindNewPrinters["PRINTER_LOCATION"] = 'Добавленный по IP'
ArgInListFindNewPrinters["DEVICE_URI"] = 'socket://'+ArgPrinterIP
else:
ListFindNewPrinters = GetFindNewPrinters(Responce.cookies)
ArgInListFindNewPrinters = FindInArrayByWord(ListFindNewPrinters,ArgPrinter)
if ArgInListFindNewPrinters == None:
print "Not find printers with arguments."
sys.exit(1)
ListPrinterDriver = GetPrinterDrivers(Responce.cookies,ArgInListFindNewPrinters['TEMPLATE_NAME'],ArgInListFindNewPrinters['PRINTER_INFO'],ArgInListFindNewPrinters['PRINTER_LOCATION'],ArgInListFindNewPrinters['DEVICE_URI'])
Driver = FindInArrayByWord(ListPrinterDriver,ArgInListFindNewPrinters['PRINTER_INFO'])
AddPrinter(Responce.cookies,ArgInListFindNewPrinters['TEMPLATE_NAME'],ArgInListFindNewPrinters['PRINTER_INFO'],ArgInListFindNewPrinters['PRINTER_LOCATION'],ArgInListFindNewPrinters['DEVICE_URI'],Driver['PPD_PATH'])
AddPrinterOptions(Responce.cookies,ArgInListFindNewPrinters['TEMPLATE_NAME'])
print "Printer: "+ArgInListFindNewPrinters['TEMPLATE_NAME']+". Succesfull add."
# Set arguments
ArgURL = sys.argv[1]
ArgPrinter = sys.argv[2]
url = 'http://'+ArgURL+':631/admin/'
if __name__ == "__main__":
try:
main()
except Exception as e:
print e
sys.exit(0)
最佳答案
使用正则表达式来匹配所需的过滤器。
import re
# List of printers
printers = [{"PPD_NAME": "HP PSC 2500 Series, hpcups 3.18.5 (en)", "PPD_PATH": "hplip:4/ppd/hplip/HP/hp-psc_2500_series.ppd"},
{"PPD_NAME": "HP LaserJet m3035 MFP hpijs pcl3, 3.18.5 (en)", "PPD_PATH": "drv:///hpijs.drv/hp-laserjet_m3035_mfp-pcl3-hpijs.ppd"},
{"PPD_NAME": "HP LaserJet m2727 MFP pcl3, hpcups 3.18.5 (en)", "PPD_PATH": "drv:///hpcups.drv/hp-laserjet_m2727_mfp-pcl3.ppd"}]
# List of filter words
filterby = "HP HP LaserJet m2727 Multifunction Printer"
# Separate into separate words
filterby_split = filterby.split()
# start with all filters
prev = printers[:]
for filt in filterby_split:
# regex to match current filter word
p = re.compile(r'\b' + filt + r'\b', flags = re.IGNORECASE)
# Generate list of printers which has the filter word
# filtering from previous list
current = [printer for printer in prev if p.search(printer["PPD_NAME"])]
if current: # there were some printers
prev[:] = current # copy to previous since found items in filter
else: # No printers found
current = prev # found none in last iteration
break
print(current[0]) # first object of last successful iteration
关于Python 数组按单词过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58165096/
我有以下数据框 (df_hvl),列名“FzListe”和以下数据: FzListe 7MA1, 7OS1 7MA1, 7ZJB 7MA2, 7MA3, 7OS1 76G1, 7MA1, 7OS1 7
我有点小问题。仅当尝试写入的相同字符串/单词不存在时,我才想写入文件。在我的例子中,它是一个 IP 地址和端口,用“:”分隔。如果我手动写入文件,例如 193...:80 和 193...:22,它指
如何返回结果列中的单词示例? 我得到的最接近的是 [\W]{2,}[^,\W].+[?=,] ID 文本 我的结果(完全匹配) 预期(完全匹配) 1 词A,世界B,词C , 世界 B, 字B 2 wo
我想在引号之间得到一个字符串 我知道一个解决方案是: /'.*?'/ 但问题是它不适用于英语中的所有格或收缩格 例如: What is the name of Mario's brother in t
我应该在句子中找到出现最多的单词。 这是我尝试过的,但不起作用。 '); $max = -1; $resultWords = array(); $resultCount = array(); $i =
我是vim的新手。我正在尝试练习(最近阅读了一些教程),但是我发现我不能不突出显示“复制粘贴”中的字符/单词/行。 在Textmate中,我通常使用SHIFT + CTRL + LeftArrowKe
有谁知道一个JSON格式的英语词典,该词典具有(单词,定义和单词类型,例如名词/形容词/动词/副词) 这种格式: [ {"Word" : "Chair", "Definition" : "A
我正在做一些 javascript,同时我注意到我无法替换 html 标记内的“ document.getElementById('label').innerHTML = document.get
您好,我正在使用 groovy 2.1.5,我必须编写一个代码来显示具有给定路径的目录的内容/文件,然后它会备份文件并替换文件中的单词/字符串。 这是我用来尝试替换所选文件中的单词的代码 String
我正在准备一个实验,我想使用python编写程序以识别参与者说出的某些单词。 我在python中搜索了很多有关语音识别的内容,但结果却很复杂(例如CMUSphinx)。 我要实现的是一个程序,该程序接
假设我有以下代码: $size = 23.9 $size = "$size GB" write $size 我想在其他事情上使用相同的变量,即 if ($size -lt 20) {...} 这显然是
我想替换字符串中单词 Date 的所有情况,除非它是 Date()(即 Date 后跟括号)。这是一个字符串示例以及我最初尝试的内容: x gsub("Date", paste("Date:", S
我对 Java 和编程都很陌生,请记住这一点,请不要对我严厉 ^^。接下来,我最近用 Java 进行了一些培训,我喜欢这个挑战,但现在我只是陷入困境。我做了一些示例来查找用户输入的最大字符串,一切都很
我必须给一个数字x,并写x个字符串(单词)。我必须找到写得最多的那一篇。它可以工作,但是当我尝试从文件中读取它时,却没有。例如,如果我执行 a.out'' #include #include in
这里是学习者,如果这个问题看起来很荒谬,请多多包涵。假设我试图引用字符串中的字符而不是字符串本身,我该怎么做呢?我的意思是; 给定:var str = "我想知道一个大脑分散的计算机如何保持理智" 我
这是阿克沙塔。我一直在解析以下数据。我想单独获取每个单词。我可以有一个示例代码以便我可以继续吗 RTRV-HDR RH01 SIMULATOR 09-11-18 16 13 19 M R
我有一个任意字符串,它总是包含至少一个英文单词后跟一系列数字:"Hello World 1234" 我如何只提取 "Hello World" 来自字符串? 最佳答案 在我看来你需要反正则表达式: St
我正在尝试输入一个四个单词的句子,然后能够使用indexOf和子字符串单独打印出每个单词。有什么想法我做错了吗? 已编辑 那么这就是它应该的样子吗?我已经运行了两次,得到了两个不同的答案,所以我不确定
如何在文本开头查找短语(单词) 我需要非常快速的解决方案来查明文本是否以某些已知短语开头 我在 Mysql (innodb) 表中的短语如下: CREATE TABLE IF NOT EXISTS `
我在 MYSQL 表中有一本字典,该表由 240 000 个单词组成。例如,如果我有字母 G、I、G、S、N> 和 O 我想选择表中包含所有或部分这些字母(并且没有其他字母)的所有单词。 可接受的词语
我是一名优秀的程序员,十分优秀!