根据两个列表从CSV文件中提取数据,第一个列表中的项目具有优先级



我有csv文件,我想根据两个不同列表中的关键字将每个文件的一部分数据提取到另一个文件中。也就是说,程序应将原始文件中的每一行与第一个列表中的关键字匹配,并写入这些行,直到找到匹配项。找到匹配项后,它应该会中断执行。如果程序到达csv文件中的最后一行而没有找到任何匹配项,那么它应该开始与第二个列表匹配并重复相同的操作。 我想优先考虑第一个列表,如果没有匹配项,则使用第二个列表开始该过程。

The first list fruit=['orange', 'apple', 'grape', 'banana','phone', 'TV', 'w']
The second list veg=['tomato','potato','onion']

以下是名为 srcfile1 的文件之一的内容示例

paper
wood
plastic
fire
water
house
onion
ginger
mints
banana
TV
watermelon
phone
pepper

我编写了以下python代码:

import os
from tqdm import *
import time
import pandas as pd
import numpy as nb
line = fr.readline()
fr = open('d:\srcfile1')
fw = open('destfile1', 'w')
found=False
while line:
line = fr.readline()
if any (item.lower() in line.lower() for item in fruit):
found=True
fw.close()
break
elif any (item.lower() in line.lower() for item in veg) and found==False:
fw.close()
break
fw.writelines(line)
fr.close()
fw.close()

代码的预期结果应该是:

paper
wood
plastic
fire
water
house
onion
ginger
mints

但是当我运行此代码时,它只匹配两个列表中的任何元素,并且不优先考虑水果列表。它只给出以下输出:

paper
wood
plastic
fire
water
house

如果有人能在这方面帮助我,我将不胜感激。

我建议使用集合和交集方法来找到你的结果

fruits = {fruit.lower() for fruit in fruits}
with open('d:\srcfile1') as f:
data = {key.lower() for key  in f.read().split('n')}
data.intersection(fruits)

我认为这就是你的意思,写fruits列表中不存在的行以及不是大写字母的行,并保留顺序,您可以使用set间集的差异和键sorted作为lines index

import os
import time
import pandas as pd
import numpy as nb
fr = open('d:\srcfile1')
lines = fr.readlines()
lines = [line.strip() for line in lines if line.islower() ]
output = sorted(set(lines) - set(fruit).intersection(set(lines)), key=lines.index)
fw = open('destfile1.txt', 'w')
for line in output:
fw.write(line+'n')
fw.close()

输出:

纸 木 塑胶 火灾 水 房子 洋葱 姜 薄荷 糖 西瓜 胡椒

最新更新