Python中按字节长度拆分字符串

2024-09-30 01:18:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个情况,我需要在一个oraclavarchar中插入4000多个字符,但有人建议我不要使用CLOB。建议的解决方案是把它分成两列,每列4000个,8000个就足够了。我使代码是动态的,这样可以处理X个数目的列以供重用。它工作得很好,通过了测试等等,直到它被部署,有人从微软的产品中复制和粘贴,它崩溃了,因为在函数中生成了4000多个字节。我没有考虑过unicode。在

我尝试了几种方法来解决这个问题,然后决定用4000个字符开始,如果字节长度超过4000,删除一个字符并再次检查字节长度。这是可行的,但我想知道是否有更好的解决办法。该函数还将列名从“column”更改为“column1”、“column2”

 text = data[key]
 index = 1
 while text:
     length = 4000
     while len(text[0:length].encode('utf-8')) > 4000:
          length -= 1
     data['{}{}'.format(key, index)] = text[0:length]
     text = text[length:]
     index += 1
 del data[key]

Tags: key函数代码textdataindex字节情况
2条回答

最后我将G. Andersonslink与我的代码组合在一起。它的效率更高,因为它不会对每个长度检查进行编码。在

    encoded_text = data[key].encode('utf-8')
    index = 1
    while encoded_text:
        length = min(4000, len(encoded_text))
        if len(encoded_text) > 4000:
            while (encoded_text[length] & 0xc0) == 0x80:
                length -= 1
        data['{}{}'.format(key, index)] = encoded_text[:length].decode('utf-8')
        encoded_text = encoded_text[length:]
        index += 1
    del data[key]

我还考虑过使用encode('unicode-escape')来解决unicode问题,但这可能会使我的字符串长度增加一倍以上。在

检查您针对CLOB的建议是最新的还是基于有关使用定位器访问LOB的旧信息。在

在cxu-Oracle中,对于“小”clob的最佳实践是将它们表示为字符串:您的代码将是简单而高效的。参见示例https://github.com/oracle/python-cx_Oracle/blob/master/samples/ReturnLobsAsStrings.py

另一个解决方案是使用支持32K VARCHAR2的Oracle DB的最新版本。在

相关问题 更多 >

    热门问题