我有一个文本文件要摄取,但是,这个文件的一些文本字段带有 CR 字符。官方的换行符是 LF,所以我想我可以替换所有 CR 并标准化为文件。
但是我现在已经尝试了一个星期,但没有什么好结果。
到目前为止我尝试的是使用具有多种配置的 replaceText 处理器。一行一行,整个文本,已经尝试过 "\r", "\\r", "[\r]" 但似乎没有任何效果。
您有什么建议或经验可以分享吗?
答案 0 :(得分:1)
您可以使用 ExecuteScript
处理器实现相同的目标,您可以在其中以更少的限制实现自定义清理逻辑。参考下面的python片段开始,
from org.apache.commons.io import IOUtils
from java.nio.charset import StandardCharsets
from org.apache.nifi.processor.io import StreamCallback
from org.apache.nifi.processors.script import ExecuteScript
from org.python.core.util.FileUtil import wrap
from io import StringIO
import re
# Define a subclass of StreamCallback for use in session.write()
class PyStreamCallback(StreamCallback):
def __init__(self):
pass
def process(self, inputStream, outputStream):
with wrap(inputStream) as f:
lines = f.readlines()
outer_new_value_list = []
is_header_row = True
for row in lines:
if is_header_row:
is_header_row = False
outer_new_value_list.append(row)
continue
char_list = list(row.strip())
for position, char in enumerate(char_list):
// put your custom cleaning logic here
if char == '\\' or char == '^' or char == '"' or char == '~' :
replace_char = '\\' + char
char_list[position] = replace_char
new_data_line = ''.join([str(elem) for elem in char_list])
outer_new_value_list.append(new_data_line + '\r\n')
with wrap(outputStream, 'w') as filehandle:
filehandle.writelines("%s" % line for line in outer_new_value_list)
# end class
flowFile = session.get()
if (flowFile != None):
flowFile = session.write(flowFile, PyStreamCallback())
session.transfer(flowFile, ExecuteScript.REL_SUCCESS)
# implicit return at the end
答案 1 :(得分:0)