小编Joh*_*alt的帖子

python重新找到可能包含括号的字符串

我试图搜索可能包含括号或其他字符的字符串,这些字符可能不会被解释为纯字符串.

def findstring(string, text):
    match = re.search(string, text)
Run Code Online (Sandbox Code Playgroud)

我不控制字符串,因为它是从另一个模块派生的.我的问题是该字符串可能包含"xyz)",这会引发一个错误,告诉我有无法匹配的括号.

我已经尝试过这个但没有成功

match = re.search(r'%s' % string, text)
Run Code Online (Sandbox Code Playgroud)

python regex string

6
推荐指数
1
解决办法
1361
查看次数

Python os.walk内存问题

我编写了一个扫描程序,用于查找扫描系统的所有硬盘驱动器上的某些文件.其中一些系统很老,运行带有256或512 MB RAM的Windows 2000,但文件系统结构很复杂,因为其中一些用作文件服务器.

我在我的脚本中使用os.walk()来解析所有目录和文件.

不幸的是我们注意到扫描仪经过一段时间的扫描后消耗了大量的RAM,我们发现os.walk功能在文件系统上行走2小时之后就会使用大约50 MB的RAM.此RAM使用量随着时间的推移而增加.扫描4小时后,我们有大约90 MB的RAM.

有没有办法避免这种行为?我们还尝试了"betterwalk.walk()"和"scandir.walk()".结果是一样的.我们是否必须编写自己的walk函数,从内存中删除已扫描的目录和文件对象,以便垃圾收集器可以不时删除它们?

随着时间的推移资源使用 - 第二行是内存

谢谢

python memory os.walk

6
推荐指数
1
解决办法
825
查看次数

Python匹配字符串,如果它不以X开头

我想在我的磁盘上搜索一个名为"AcroTray.exe"的文件.如果文件位于"Distillr"以外的目录中,程序应该打印警告.我使用以下语法来执行否定匹配

(?!Distillr)
Run Code Online (Sandbox Code Playgroud)

问题是虽然我使用"!" 它总是产生一个MATCH.我试图使用IPython找出问题,但失败了.这是我试过的:

import re

filePath = "C:\Distillr\AcroTray.exe"

if re.search(r'(?!Distillr)\\AcroTray\.exe', filePath):
    print "MATCH"
Run Code Online (Sandbox Code Playgroud)

它打印一个MATCH.我的正则表达式出了什么问题?

我想得到一个匹配:

C:\SomeDir\AcroTray.exe
Run Code Online (Sandbox Code Playgroud)

但不是:

C:\Distillr\AcroTray.exe
Run Code Online (Sandbox Code Playgroud)

python regex match

5
推荐指数
1
解决办法
3773
查看次数

一旦被bytes.Buffer占用就无法释放内存

我收到compressedbytes类型为[] byte 的压缩ASCII文本字节.我面临的问题是,以下过程占用了大量内存,这些内存在函数到达其结束后未被释放,并且在程序的整个运行时期间仍然被占用.

    b := bytes.NewReader(compressedbytes)
    r, err := zlib.NewReader(b)
    if err != nil {
        panic(err)
    }
    cleartext, err = ioutil.ReadAll(r)
    if err != nil {
        panic(err)
    }
Run Code Online (Sandbox Code Playgroud)

我注意到使用的类型是bytes.Buffer,这种类型具有Reset()Truncate()函数,但它们都不允许释放曾经占用的内存.

文档Reset()状态如下:

重置将缓冲区重置为空,但它会保留底层存储以供将来的写入使用.重置与截断(0)相同.

如何取消缓冲区并再次释放内存?我的程序在运行期间需要大约50MB的内存,需要2小时.当我导入zlib压缩的字符串时,程序需要200 MB的内存.

谢谢你的帮助.

===更新

我甚至为解压缩创建了一个单独的函数,并runtime.GC()在程序从该函数返回后手动调用垃圾收集器,但没有成功.

// unpack decompresses zlib compressed bytes
func unpack(packedData []byte) []byte {
    b := bytes.NewReader(packedData)
    r, err := zlib.NewReader(b)
    if err != nil {
        panic(err)
    }
    cleartext, err := ioutil.ReadAll(r)
    if …
Run Code Online (Sandbox Code Playgroud)

memory buffer zlib go

4
推荐指数
1
解决办法
8848
查看次数

Python模式负面看后面

我试图找出一个匹配文件路径字符串的正则表达式模式,其中名为"cmd.exe"的文件不在"System32"文件夹或其任何子文件夹中.

模式应与此匹配:

C:\Tools\calc.exe
Run Code Online (Sandbox Code Playgroud)

但不是这个:

C:\Windows\System32\calc.exe
C:\Windows\System32\De-de\calc.exe
Run Code Online (Sandbox Code Playgroud)

我尝试了背后的负面看法:

(?<![Ss]ystem32)\\calc\.exe
(?<![Ss]ystem32).*\\calc\.exe
(?<![Ss]ystem32[.*])\\calc\.exe
Run Code Online (Sandbox Code Playgroud)

但迄今为止没有任何工作.有人看到我的错误吗?

您可以在此处查看我的示例并自行尝试:http: //rubular.com/r/syAoEn7xxx

谢谢你的帮助.

python regex pattern-matching negative-lookbehind

2
推荐指数
1
解决办法
281
查看次数