可变长度前缀字符串的操作

Posted

技术标签:

【中文标题】可变长度前缀字符串的操作【英文标题】:Manipulation of variable length prefix string 【发布时间】:2015-09-10 23:43:53 【问题描述】:

对 Python 非常陌生,并且在这个网站上找到了大量很棒的 Q 和 As。谢谢你们。这是我的困境:

我有一个位置树来递归搜索和移动某些类型的数据(如果它们存在的话),我发现很多可以利用它。我的问题是命名约定。名称有一个标准格式,其中前缀为 3 或 4 个字符(每个字符中的一些),名称为多个,后缀为 4 个字符。某些名称使用“_”作为分隔符(PLAN_someFile_to_work_ZZTT 或 FOR_someOtherFile_XXYY。(PLAN,FOR - 是前缀....ZZTT,XXYY - 是后缀)

问题来了:我如何将它干净地拆分为三个元素,或者“Pythonicly”拆分为前缀、fName 和后缀? fName 长度各不相同,如果存在则需要“_”。我已经能够操作和删除“_”,但是当尝试仅获取 fName(有或没有“_”时,前缀长度为 3 4 "。) 我被绊倒了,无法选择正确的字符数。

哦,我可以很好地提取前缀,并在一个合法值的元组中检查它的存在。有没有办法轻松地从该元组中选择前缀?作为一种选择,我可以改用它或尝试从文件中解析它。

代码是测试代码。打印语句是为了开发人员的利益,不会出现在最终代码中。一些测试是为了让我理解 Py 如何处理这些东西。谢谢。

 for dirName, subdirList, fileList in os.walk(rootDir):
    print('Found directory: %s' % dirName)
    if dirName.lower().endswith('.xxx'):
        print('\n %s is a Database. ' % dirName)
        BADrop = ntpath.basename(dirName)
        print ('%s is variable BADrop. ' %BADrop)
        dropName = remove(BADrop, '_')
        print ('%s is variable dropName. ' %dropName)
        NST = BADrop.split('_') [0]
        NSP = BADrop.split('_') [-1]
        NSP = os.path.splitext(NSPrj) [0]
        NSt = os.path.splitext(BADrop) [1]
        abc = dropName[4:-8]
        if NST in pubTheme2: #pubTheme2 is a tuple list of legit values for the Prefix
            print ('%s is variable NST. ' %NST)
            print ('%s is variable NSP. ' %NSP)
            print ('%s is variable NSt. ' %NSt)
            print ('%s is variable abc. ' %abc)

【问题讨论】:

***.com/questions/7539959/… 这对我有用吗?我问了才发现这个?如果可以的话,我需要更多的外行来解释......谢谢,Breton01 【参考方案1】:
x = "PLAN_someFile_to_work_ZZTT"
y = "FOR_someOtherFile_XXYY"

def split(x):
    z = x.split("_")
    z[1] = "_".join(z[1:-1])
    del(z[2:-1])
    return z

print split(x)
print split(y)

这样的事情对你有用吗?

PS,如果您不希望下划线保留在“中间”部分,只需将"_".join(z[1:-1]) 更改为"".join(z[1:-1])。无论哪种方式都可以。

【讨论】:

对不起 maccartm。我试过了,但没有用。 z 从空函数返回。我还尝试了在第一条评论中放置链接的帖子。那篇文章让我更进一步,但最终在此过程中删除了前缀。我需要将其保留为变量,以帮助确定将文件移动到的目标路径,作为 oif 处理的一部分。 如果您希望它返回,请添加return z;我只是在我的示例中打印了它 使用编辑过的代码对我来说很好,关心发布你的方法吗?我得到的两个输出是['PLAN', 'someFile_to_work', 'ZZTT']['FOR', 'someOtherFile', 'XXYY'] 我昨天不在,谢谢 maccartm,你对我提供的内容是正确的,一旦我工作通过并有更好的理解,我会发布我的解决方案。我发布了名称中带有“_”字符的项目,由于这是可选的,我需要测试和分支。您提供的内容肯定会成为解决方案的核心部分,而不是完整的解决方案。

以上是关于可变长度前缀字符串的操作的主要内容,如果未能解决你的问题,请参考以下文章

codeforces 938F(dp+高维前缀和)

如何在批处理文件中的for循环中使用可变长度的子字符串?

为啥在 64 位平台上 BSTR 长度前缀为 4 个字节?

可变长度的字符

找出一个可变长度的字符串?

python字符串操作