python - Apache NiFi:使用 ExecuteScript 处理器处理多个 csv
问题描述
我有一个 70 列的 csv。第 60 列包含一个值,该值决定记录是valid
还是invalid
。如果第 60 列有 0、1、6 或 7,则为valid
. 如果它包含任何其他值,那么它的invalid
.
我意识到这个功能不可能完全依赖于改变 Apache NiFi 中处理器的属性。因此,我决定使用executeScript processor
并添加此 python 代码作为文本正文。
import csv
valid =0
invalid =0
total =0
file2 = open("invalid.csv","w")
file1 = open("valid.csv","w")
with open('/Users/himsaragallage/Desktop/redder/Regexo_2019101812750.dat.csv') as f:
r = csv.reader(f)
for row in f:
# print row[1]
total +=1
if row[59] == "0" or row[59] == "1" or row[59] == "6" or row[59] == "7":
valid +=1
file1.write(row)
else:
invalid += 1
file2.write(row)
file1.close()
file2.close()
print("Total : " + str(total))
print("Valid : " + str(valid))
print("Invalid : " + str(invalid))
我不知道如何在执行脚本处理器中使用会话和代码,如this question所示。所以我只是写了一个简单的python代码,并将有效和无效数据定向到不同的文件。我使用的这种方法有很多局限性。
- 我希望能够动态处理具有不同文件名的 csv。
- 发送无效数据的 csv 也必须与输入 csv 具有相同的文件名。
- 我的
redder
文件夹中大约有 20 个 csv。所有这些都必须一次性处理。
希望您能建议我执行以下操作的方法。随时通过编辑我使用的python代码甚至完全使用一组不同的处理器并完全排除使用ExecuteScript Processer
解决方案
推荐阅读
- javascript - 动态加载选项 - JQuery Select2
- r - 如何使用 IF_ELSE 添加列
- realex-payments-api - Global Payments 托管支付页面集成 - 沙盒和 prod POST 回商家Url 延迟
- html - 使用脚本的 SharePoint 目录 (TOC) 不会转到 TOC 的引用位置
- powershell - 通过 Powershell 重命名计划任务
- wordpress - 如何使用 acf_form() 提交来更新我的帖子标题和永久链接?
- python - 如何阻止 texttable 将我的字符串转换为数字?
- angular - 如何在 Angular 10 中编辑和更新数据
- javascript - React-sound soundmanager 不适用于 useHistory 钩子
- discord - 如何在我的命令中实现 wait_for 函数?