gpt4 book ai didi

python - 清理数据 : How to iterate through a list find if item contains a string, 空白或空白并在 Python 中删除该项目

转载 作者:太空宇宙 更新时间:2023-11-04 09:31:31 26 4
gpt4 key购买 nike

我正在尝试遍历数据列表以清理它。

这是列表的一小部分:

lines =['Wirkstoffliste 1 –  ','','  ', 'Gaschromatographie (GC) ', 'LOQ ', '[mg/kg] ', 'Acibenzolar-S-methyl', 'Aclonifen', 'Acrinathrin', 'Alachlor', 'Aldrin', 'Allethrin', 'Ametryn', 'Antrachinon', 'Atrazin', 'Atrazin-desethyl', 'Atrazin-desisopropyl', 'Azinphos (-ethyl)', 'Azinphos-methyl', 'Benalaxyl', 'Benfluralin', 'Benzoylprop-ethyl',' Seite 13 von 14 ', '   ', ' ', ' ', 'Wirkstoffliste 4 - ','Version 7.2 ']

我想删除任何包含单词“Version”、“Seite”和“Wirkstoffliste”的列表项。您还会看到一些字符串要么是空白,要么只包含空格(不同长度)。

我已经用正则表达式清理了很多这些数据,但现在我只想要化学名称。还有一些我不想要的其他项目不断出现,例如“版本”,但它们永远不会完全相同,因此可能是“版本 7.2”或“版本 8.1”。因此我想如果我尝试“如果字符串中的‘版本’”,这会在字符串中找到它,然后我可以选择删除它。但是,这似乎不起作用。

我真的需要对此也使用正则表达式吗?

这是我尝试过的一堆东西。

我试过 if string in item.

if "Wirkstoffliste" in item:
lines.remove(item)

我尝试过使用 OR 逻辑,这样我就可以在其中放置更多搜索字符串。例如

if "Seite" or "Wirkstoffliste" or "Version" in item:
lines.remove(item)

我在声明中同时使用了 enumerate with del 和 if,例如

for n,item in enumerate(lines):
if "Wirkstoffliste" in item:
del lines[n]

最后我尝试使用搜索字符串列表:

removables=["Seite","Version","Wirkstoffliste","Gaschromatographie","LOQ"]

for line in lines:
for r in removables:
if r in line:
lines.remove(line)

要删除我试过的空格和空格:

"""delete empty items"""
lines = list(filter(None, lines))
lines = list(filter(bool,lines))

for item in lines:
if item=="" or " ":
lines.remove(item)

我发现以上都不起作用,所以我有点困惑我做错了什么。

最佳答案

这是一个解决方案:我正在使用 filterany

l1 = ['Wirkstoffliste', 'Seite','Version']
#i am with lines[:] (slicing) to play with the fact a list is mutable
lines[:] = list(filter(str.strip,lines)) #suppress items whitespace or empty
lines[:] = [x for x in lines if not any(sub in x for sub in l1)]

# you could write these lines too if using a new list:
#lines = list(filter(str.strip,lines))
#lines = [x for x in lines if not any(sub in x for sub in l1)]
print(lines)

输出:

['Gaschromatographie (GC) ', 'LOQ ', '[mg/kg] ', 'Acibenzolar-S-methyl', 
'Aclonifen', 'Acrinathrin', 'Alachlor', 'Aldrin', 'Allethrin', 'Ametryn',
'Antrachinon', 'Atrazin', 'Atrazin-desethyl', 'Atrazin-desisopropyl',
'Azinphos (-ethyl)', 'Azinphos-methyl', 'Benalaxyl',
'Benfluralin', 'Benzoylprop-ethyl']

另一种使用过滤器编写编码的方法: 如果返回函数为真,则过滤器保留数据

def remove_whitespaces_and_items(item):
if item.strip() == '': return False # if item is blank, dont keep
for x in l1:
if x in item:
return False # if item of l1 is in lines, dont keep
return True # item is not blank and not in l1, so keep it

lines =list(filter(remove_whitespaces_and_items,lines))

关于python - 清理数据 : How to iterate through a list find if item contains a string, 空白或空白并在 Python 中删除该项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55572776/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com