python中 n是换几行_如何在Python中用`\ n`替换通用换行符?

本文探讨了在Python3中如何有效地用' '替换'通用换行符',包括使用b' '.join(bytestr.splitlines())方法和其他优化方案,如Cython和Numba加速。文章提供了多个解决方案的比较和基准测试,以帮助选择最适合的实现方式。
摘要由CSDN通过智能技术生成

b'\n'在bytesPython3对象中,用替换所有“通用换行符”的最佳(最干净,最快)方法是什么?

编辑:我最终使用b'\n'.join(bytestr.splitlines())它,因为它似乎是最安全的,而且我不介意在最后放置一个潜在的换行符。

但是请@norok2注意以下关于警告,时间安排和更快解决方案的出色答案。

解决方案

派对晚了一点,但让我们看看我能为我们做些什么。

首先,一个披露:我最喜欢的是@JohnHennig的double.replace()方法,因为它相当快,而且很清楚发生了什么。

我认为没有其他的简单和快速的标准Python中的解决方案超出了在其他的答案(其中一些我稍微修改以获得完全相同的结果作为双已经提出.replace())。

但是,有可能加快速度。在这里,我提出了3种其他解决方案:两种使用Cython,一种使用Numba。

为简单起见,我使用Cython魔术师用IPython编写了此代码。

%load_extCython

核心思想是,只要我们将数据复制到另一个字符串中,仅循环一次输入就足够了。

立即在Python中进行编码很简单,但是要使其可行,我们需要使用bytearray()克服str/的不变性bytes。可以使用Cython(unl_loop_cy())编译慢速循环以提高速度。

%%cython-c-O3-c-march=native-a#cython: language_level=3, boundscheck=False, wraparound=False, initializedcheck=False, cdivision=True, infer_types=Truedefunl_loop_cy(b):nl_cr=b'\r'[0]nl_lf=b'\n'[0]n=len(b)result=bytearray(n)i=j=0whilei+1<=n:ifb[i]==nl_cr:result[j]=nl_lf

i+=2ifb[i+1]==nl_lfelse1else:result[j]=b[i]i+=1j+=1returnbytes(result[:j])

然而,无论是bytes也不bytearray是Numba兼容。要使用它,我们需要遍历NumPy,它提供了bytes有效处理的方法:np.frombuffer()和np.ndarray.tobytes()。基本算法保持不变,代码现在显示为:

importnumpyasnpimportnumbaasnb@nb.jitdef_unl_loop_nb(b,result):nl_cr=b'\r'[0]nl_lf=b'\n'[0]n=len(b)i=j=0whilei+

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值