如何在Nifi上替换回车(CR)而不是换行(LF)

时间:2021-02-01 14:16:19

标签: apache-nifi carriage-return

我有一个文本文件要摄取,但是,这个文件的一些文本字段带有 CR 字符。官方的换行符是 LF,所以我想我可以替换所有 CR 并标准化为文件。

但是我现在已经尝试了一个星期,但没有什么好结果。

到目前为止我尝试的是使用具有多种配置的 replaceText 处理器。一行一行,整个文本,已经尝试过 "\r", "\\r", "[\r]" 但似乎没有任何效果。

您有什么建议或经验可以分享吗?

2 个答案:

答案 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)

经过一周的尝试,我能够用一个简单的替换文本处理器替换文件中的回车符。如果需要,这是您可以尝试的打印件。 replaceText Processor

相关问题