Python:若在中,则匹配在中找到的行的字段
标题可能有点让人困惑,但我想知道是否有一种方法可以让我们“if-in”在匹配后查看数组中的其他字段。我想如果没有内置的东西,我只需要手动完成,而不是使用is-in 无论如何,我的代码如下所示:Python:若在中,则匹配在中找到的行的字段,python,list,if-statement,Python,List,If Statement,标题可能有点让人困惑,但我想知道是否有一种方法可以让我们“if-in”在匹配后查看数组中的其他字段。我想如果没有内置的东西,我只需要手动完成,而不是使用is-in 无论如何,我的代码如下所示: csv = csv.reader(response) query = con.fetchall() for row in query: if row[1] in csv: do some stuff else: do some other stuff 有没有
csv = csv.reader(response)
query = con.fetchall()
for row in query:
if row[1] in csv:
do some stuff
else:
do some other stuff
有没有办法让第一个if基本上是“如果csv中的行[1]和匹配的csv[4]==TRUE:做一些事情”
基本上就像两阶段匹配,如果它存在,如果其中一个字段等于其他字段
任何帮助都将不胜感激 您首先需要加载完整的csv,目前您只需对其进行迭代。另外,您要做的似乎是在csv行中的某个位置查找第[1]行,您的代码当前正在查找与第[1]行匹配的完整csv行,我怀疑该行是否正确。这是我对你所问问题的回答
rows = list(reader(response))
query = con.fetchall() # this one you can iterate through, I am just copying what you had
for row in query:
rs = filter(lambda r: row[1] in r, rows)
for r in rs:
if r[4]:
pass # do some stuff (here)
break
else: # this is a for ... else loop
pass # do some other stuff
我再一次对你的实际问题做了很多假设。。。如果你澄清你的问题,我也许能找到一个更有效的解决方案。如果你只使用csv中的
如果行[1]和csv[4]==True,那有什么错呢
我想他可能是指csv中的如果行[1]和行[1]==csv[4]:
,也许?如果csv阅读器对象支持和切片,我会非常惊讶。所有序列都是可iterable,但并非所有可iterable都是序列。如果您想随机访问csv数据,您需要首先将整个内容读入内存。csv读取器返回一个iterable,但您需要的是将iterable展开到一个列表中,即rows=list(reader(response))
。我们需要更多地了解csv行的外观,看起来您希望将行[1]与csv行中的任何列相匹配(这是否正确),如果是这样,您的代码需要更改很多。关于您正在做什么的更多详细信息将有助于了解。csv是一个从网页下载的文件,这是一个csv,我通过urllib2获取,然后使用csv.reader将其使用。基本上,首先我需要检查行[1]是否在CSV中,然后,如果找到它,我想检查CSV中找到它的元素,看看CSV[4]的值是多少。我认为最终的答案可能涉及对加载的CSV数据使用索引
,而不是每次过滤它。取决于实际问题是什么。我最初使用index,然后意识到rows.index(row[1])无法匹配任何内容,因为rows是列表的列表,而row[1]将是某种文字(int,string…)。由于问题最初是编码的,索引看起来确实应该使用,但我怀疑它在这里是否可用。我想这可能行得通,我对Python有点陌生,但我会尝试一下。为了澄清,CSV是我通过urllib2从网站下载的CSV,我得到响应并使用CSV.reader()创建“CSV”变量。我在“查询”中有一个元组列表,这些元组是IP地址和一些其他信息。CSV中有一个IP地址列表和一个字段(CSV[4]),可以设置为True或False。我想在“查询”中遍历每个IP的CSV,如果匹配,则检查CSV的该元素以查看CSV[4]是否为真。像泥一样干净?这就是我最终要做的,或者类似的事情。我认为它最终应该对我有用,我只是有一些其他的逻辑需要解决。CSV中的ip地址是什么列?现在,这段代码针对每一行查看csv的每一列,如果您知道该列,则可以使其更加高效。