如何检查列表中的项目是否存在于使用python的其他列表中?
我有一个包含这些线路例如如何检查列表中的项目是否存在于使用python的其他列表中?
[:];@;;]wqwww actualnumber 1234 ;;:@##
aaaa ''3# allnumber 9876
///qqq |||)))
]][]: best 56
我想要得到的价值1234
,9876
,56
一个文本文件。像这样(期望输出)
1234
9876
56
我试着用下面的脚本,但它并没有打印出任何东西
with open("test.txt", "r") as f:
lines = f.readlines()
stripped_lines = [line.strip() for line in lines]
word = ["actual number", "potential", "time"]
if any(item in stripped_lines for item in word):
aa = stripped_lines.split("actualnumber ")[1].split(" ")[0]
bb = stripped_lines.split("allnumber ")[1].split(" ")[1]
cc = stripped_lines.split("best ")[1]
print aa
print bb
print cc
我错过了什么?
你可以用re模块
import re
with open('f.txt') as f:
data = f.read()
act = re.findall(r'actualnumber\s+(\d+)',data)
best = re.findall(r'best\s(\d+)',data)
allnumber = re.findall(r'allnumber\s(\d+)',data)
print "actualnumber : ", act[0] if act else None
print "allnumber : ", allnumber[0] if allnumber else None
print "best : ", best[0] if best else None
输出
actualnumber : 1234
allnumber : 9876
best : 56
做到这一点你可以这样提取号码:
k = '[:];@;;]wqwww actualnumber 1234 ;;:@##'
for item in k.split():
if item.isnumeric():
print(item)
你会用你的条纹线代替。对于条线中的每一行,分割它,并检查分割线中的任何项目是否为数字。 isnumeric()
只适用于unicode对象。
with open("test.txt", "r") as f:
lines = f.readlines()
stripped_lines = [line.strip() for line in lines]
words = ['actualnumber', 'allnumber', 'best']
found = {}
for line in stripped_lines:
current_line = line.split()
for position, item in enumerate(current_line):
if item in words:
found[item] = current_line[position + 1]
现在,你有他们在字典中,您可以访问它们为:found['actualnumber']
。并进行进一步的处理,例如将它们存储在数据库中。
最简单的方法是使用isdigit()
f = open('test.txt')
data = f.read()
[int(s) for s in data.split() if s.lstrip("-").isdigit()]
输出:
[1234, 9876, 56]
如果数字是负数,该怎么办? ''“-1”.isdigit()''返回''False''。 – Liliane
@Liliane在这种情况下,您可以使用lsstrip(“ - ”) –
word = ["actualnumber", "potential", "time"]
with open("./abx.txt") as file:
temp_list = [line.strip() for line in file.readlines()]
list_val = [item for item in temp_list if any(x in item for x in word)]
final_list = []
match_value = ["actualnumber", "allnumber", "best"]
if list_val:
for val in temp_list:
val_list = val.split(" ")
for key, value in enumerate(val_list):
if value in match_value:
final_list.append(val_list[key+1])
print(final_list):
,并在结束时,你可以遍历列表,并找出你的预期值。
你真的想通过关键字在字符串中搜索数字,或者你只是想抓住一个字符串中的任何数字? – Liliane
我其实想抓住特定位置的号码。所以我为什么要'9876'而不是'3'。如果你可以在文本文件中看到,基本上我想要得到一个关键字后的数字 – Ling
Hi @Ling可能会帮助找到相同的值, match_values = [我在stripped_lines中的item for i in word if item在我] 为match_values值: \t打印(价值) – Anup