可变长度前缀字符串的操作
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,你对我提供的内容是正确的,一旦我工作通过并有更好的理解,我会发布我的解决方案。我发布了名称中带有“_”字符的项目,由于这是可选的,我需要测试和分支。您提供的内容肯定会成为解决方案的核心部分,而不是完整的解决方案。以上是关于可变长度前缀字符串的操作的主要内容,如果未能解决你的问题,请参考以下文章