PYTHON3 字符串 技术教程文章

字符串在Python内部是如何省内存的?案例详解【代码】【图】

起步Python3 起,str 就采用了 Unicode 编码(注意这里并不是 utf8 编码,尽管 .py 文件默认编码是 utf8 )。 每个标准 Unicode 字符占用 4 个字节。这对于内存来说,无疑是一种浪费。 Unicode 是表示了一种字符集,而为了传输方便,衍生出里如 utf8 , utf16 等编码方案来节省存储空间。Python内部存储字符串也采用了类似的形式。另外还要注意:不管你是为了Python就业还是兴趣爱好,记住:项目开发经验永远是核心,如果你没有2020...

将宽字符转换为python字符串时潜在的内存泄漏【代码】

我在pyx文件的cython中有以下代码,该代码将wchar_t *转换为python字符串(unicode) //下面的所有代码都是python 2.7.4cdef wc_to_pystr(wchar_t *buf):if buf == NULL:return Nonecdef size_t buflenbuflen = wcslen(buf)cdef PyObject *p = PyUnicode_FromWideChar(buf, buflen)return <unicode>p我在这样的循环中调用了此函数:cdef wchar_t* buf = <wchar_t*>calloc(100, sizeof(wchar_t)) # ... copy some wide string to buffo...

字符串如何存储在python内存模型中【代码】

我来自c背景,并且是python的初学者.我想知道在使用python的情况下字符串实际上是如何存储在内存中的. 我做了类似的事情s="foo"id(s)=140542718184424id(s[0])= 140542719027040 id(s[1])= 140542718832152 id(s[2])= 140542718832152我不明白每个字符如何存储在内存中,为什么s的id不等于s [0]的id(就像以前在c中一样),为什么s1和s2的id相同?解决方法:Python没有字符.索引一个字符串会创建一个新的字符串,如果您不保留对该字符串的...

如何将带有空格的字符串从Python发送到Bash子进程作为单个值?【代码】

我正在尝试将变量从python脚本发送到bash脚本.我正在使用popen,如下所示:subprocess.Popen(["bash", "-c", ". mainGui_functions.sh %d %s" % (commandNum.get(), entryVal)])但是,entryVal有时可以包含一个或多个空格字符.在那种情况下,我将字符串分成多个参数($2,$3 ..) 如何在一个参数中得到它?解决方法:简单的解决方案#1:如果您在命令行上键入输入,则可以使用完全相同的方法进行操作;用引号引起来:subprocess.Popen(["bas...

Windows 10 Linux子系统-Python-电脑剪贴板的字符串【代码】

我有一个python脚本,我想在计算机的剪贴板中放置一个字符串.我可以在Linux,Mac和以前使用cygwin的Windows中使用它.我必须修改一行代码才能使其在相应的系统中工作.我无法将字符串复制到Windows 10本机Linux子系统上的剪贴板.下面的行导致错误:sh:1:无法创建/ dev / clipboard:权限被拒绝.知道如何修改此行吗?os.system("echo hello world > /dev/clipboard")解决方法:要在Windows上获取剪贴板内容,可以使用win32clipboard:im...

加载模块时,Python文档字符串和注释是否存储在内存中?【代码】

Are Python docstrings and comments stored in memory when a module is loaded?我想知道这是否属实,因为我通常会很好地记录我的代码;这可能会影响内存使用吗? 通常每个Python对象都有一个__doc__方法.这些文档字符串是从文件中读取还是以其他方式处理? 我在论坛,谷歌和邮件列表中进行了搜索,但我没有找到任何相关信息. 你知道的更好吗?解决方法:默认情况下,文档字符串存在于.pyc字节码文件中,并从中加载(注释不是).如果你使用...

如何使用Python中的Managers()在多个进程之间共享字符串?【代码】

我需要读取主进程中的multiprocessing.Process实例编写的字符串.我已经使用Managers和队列将参数传递给进程,所以使用Managers似乎很明显,but Managers do not support strings:A manager returned by Manager() will support types list, dict,Namespace, Lock, RLock, Semaphore, BoundedSemaphore, Condition, Event,Queue, Value and Array.如何使用多处理模块中的Managers共享由字符串表示的状态?解决方法:多处理的管理器可以...

Python共享字符串内存用于多处理【代码】

我正在尝试在我的Python进程之间使用共享字符串变量,但似乎我做错了,因为我得到了coredumps和无效的内存值. 我使用multiprocessing.Value创建一个ctypes.c_char_p值并使用value属性来访问它.在我对Python文档的理解中,value属性应该是同步的,只要它是Value的一个实例(与RawValue的实例相反).到目前为止这是正确的吗? 我创建了一个简短的例子来演示我对Value的使用并在执行时显示不一致:from multiprocessing import Process, Val...

Python字符串作为子进程的文件参数【代码】

我试图将一个文件传递给一个程序(MolPro),我用Python开始作为子进程. 它通常将文件作为参数,在控制台中如下所示:path/molpro filename.ext其中filename.ex包含要执行的代码.或者一个bash脚本(我在Python中尝试做的):#!/usr/bin/env bash path/molpro << EOF# MolPro code EOF我正在尝试在Python中执行上述操作.我试过这个:from subprocess import Popen, STDOUT, PIPE DEVNULL = open('/dev/null', 'w') # I'm using Python 2 ...

在Python中为shell命令转义字符串[复制]【代码】

参见英文答案 > How to escape os.system() calls? 10个我有兴趣在Python3.x中转义字符串,例如:SOME_MACRO(a, b)成…SOME_MACRO\(a,\ b\)…这样它就可以作为定义传递给程序(在本例中不是gcc), 例如,some_program -DSOME_MACRO\(a,\ b\)="some expression"我希望shlex有这个功能,但我没有找到如何做到这一点并检查了许多类似的问题. 我不介意写一些简单的函数来做到这一点,但这似乎是Python所包...

Python(或C)中内存有效的字符串到字符串映射【代码】

我需要一个内存高效的数据结构来存储大约一百万个键 – 值对,其中键是大约80字节的字符串,值是大约200字节的字符串,总键和值大小约为280MB.我还需要通过键有效地查找值,最好是哈希映射.内存开销应该尽可能少,例如对于280MB的有用数据,数据结构不应使用超过300MB的虚拟内存(包括malloc()开销和其他所有内容).使用模式如下:我们从一个空的数据结构开始,我们逐渐填充它,从不更改键,也从不改变值的长度.作为一个加号,数据结构可能支持...

使用Python将阿拉伯语或任何从右到左的书写系统字符串打印到Linux终端【代码】

非常简单的例子是:city = "????????" print(city)我期待输出为:????????但事实上,输出是反向字符串(字母看起来有点不同,因为它们具有开始,中间和结束形式).我无法将其粘贴到此处,因为复制粘贴会再次纠正字符串的顺序. 如何将正确的阿拉伯语打印到Linux终端?周围的文本是从左到右(LTR),只有这一行需要从右到左(RTL).是否有UFT-8字符可以告诉终端?解决方法:要使用RTL字符创建字符串:rtl = u'\u200f'Python 3默认使用UTF字符串,因...

Python3:包含进程之间字符串的共享数组【代码】

我想在进程之间共享一个包含字符串的列表,但不幸的是我收到错误消息“ValueError:字符U 169ea10不在范围[U 0000; U 10ffff]”中. 这是Python 3代码:from multiprocessing import Process, Array, Lock from ctypes import c_wchar_p import timedef run_child(a):time.sleep(2)print(a[0]) # print fooprint(a[1]) # print barprint(a[2]) # print bazprint("SET foofoo barbar bazbaz")a[0] = "foofoo"a[1] = "barbar"a[2] = "b...

如何检查已经由Python脚本生成的字符串的linux shell编码【代码】

我运行一个Python脚本,生成一个字符串,然后使用该字符串执行shell脚本.我想使用linux shell检查该字符串的编码,但不在文件中写入该字符串(磁盘操作运行缓慢).是否可以仅使用RAM检查Linux(Ubuntu)中的字符串编码?就像是:check-encoding ‘My string with random encoding’Python检查编码脚本也很慢.解决方法:试试文件工具.你可以使用echo piped to utility with – option将任何字符串作为文件参数传递给文件(许多命令使用连字...

python – 在子进程的共享c_wchar_p中设置字符串的值?【代码】

我有这样的情况: 主进程生成一些子进程,他们应该将结果写入字符串和数字类型的共享对象中,对于数值类型,没有问题但是字符串的值将丢失.import multiprocessing as mp from ctypes import Structure, c_double, c_wchar_p, c_int# shared obj class class SharedObj(Structure):_fields_ = [('name', c_wchar_p), ('val', c_double) ]def run_mp( values , lock , s ) :for i in range( s , len( values ) , 2 ):lock.acquire()val...

将模型状态从内存或python opencv中的字符串加载到FaceRecognizer中【代码】

是否可以从内存或字符串而不是从保存的文件加载FaceRecognizer的模型. API文档未显示“FromString或Buffer”版本. 当前代码从文件加载:model = cv2.createLBPHFaceRecognizer() model.load('model.xml')更多背景.预先存储的模型存储在S3中.我不想从S3检索然后保存到磁盘才能使用.我宁愿直接从s3加载到模型中或将xml字符串/文档加载到模型中.解决方法:不幸的是,不可能从python(cv2)atm. 虽然你可以从c,string yml; // the whole sc...

python – cython:ndarray字符串的内存视图(或直接ndarray索引)【代码】

如何指定包含字符串的ndarray的内存视图? char [:],char * [:],…不起作用. 为了说明,我的问题是函数abc(…)的定义:cdef void abc(char[:] in_buffer):cdef char * elementelement = address(in_buffer[1])...def main():cdef Py_ssize_t i, n = 100a = np.array(['ABC', 'D', 'EFGHI'])for i in range(n):abc(a)如果无法访问内存视图,我可以自己实现直接阵列访问吗?我需要避免功能abc(…)的GIL. 编辑1:回应Bi Rico的回答. 我...

python – unicode字符串中的内存位置【代码】

我知道有人在我创作时解释原因Python 2.7中相同的unicode字符串它们没有指向内存中的相同位置与“普通”字符串一样>>> a1 = 'a' >>> a2 = 'a' >>> a1 is a2 True好吧那就是我的预期,但是>>> ua1 = u'a' >>> ua2 = u'a' >>> ua1 is ua2 False为什么?怎么样?解决方法:不保证正常字符串被中断.有时他们是,有时他们不是.规则很复杂,特定于版本,故意没有记录. 你可以依赖这样一个事实,即只要一个好主意,Python就会尝试实现常用的小对象...