python - Python:根据匹配从列表中写入文件
问题描述
请帮忙。我正在尝试根据字符串匹配从列表列表中编写单独的文件。
下面的列表 X 有 3 个子列表,基于过滤器的匹配,我想过滤这些行并将它们写入单独的文件。
X = ['apple,banana,fruits,orange', 'dog,cat,animals,horse', 'mouse,elephant,animals,peacock']
filter = (fruits, animals)
从 X 中的列表中,我想根据在filter
.
尝试以下不完整的代码:
def write(Y):
temp = []
for elem in Y:
for n in filter:
if n in elem:
temp.append(elem)
预期输出:
cat fruits.csv:
apple,banana,fruits,orange
cat animals.csv
dog,cat,animals,horse
mouse,elephant,animals,peacock
请帮助或建议最好的方法来做到这一点。
提前致谢。
解决方案
您可以使用键作为文件名从列表中创建字典,然后迭代字典以写入文件:
import re
from collections import defaultdict
X = ['apple,banana,fruits,orange', 'dog,cat,animals,horse', 'mouse,elephant,animals,peacock']
filter = ('fruits', 'animals')
d = defaultdict(list)
for x in X:
for f in filter:
if re.search(fr'\b{f}\b', x):
d[f].append(x)
for k, v in d.items():
with open(f'{k}.csv', 'w') as fi:
for y in v:
fi.write(y)
推荐阅读
- azure - Azure 功能不适用于 https,仅适用于 http
- node.js - Node.js Paypal 集成
- python - 如何在 pandas csv 文件中将没有 numpy 和数学的数组相乘
- javascript - Webpack 4从scss中提取css而不是从编译文件中删除sass文件
- javascript - IE11 - 在控制台中抛出错误,而它在 chrome 中工作正常
- callback - 在电子中,如何在 6.0.0 版本的 dialog.showMessageBox 设置回调?
- c++ - 构建opencv库时如何将“../../lib/libopencv_videoio.so”转换为“libopencv_videoio.so”?
- nestjs - NestJs - ParseUUIDPipe - 验证失败(应为 uuid vundefined)
- android - 当我在 android studio 中的 RelativeLayout 下设置时,按钮未显示在输出屏幕中
- node.js - 在同步函数中正确执行异步函数