gpt4 book ai didi

python - 从右边开始每隔第 n 个字符拆分字符串?

转载 作者:太空狗 更新时间:2023-10-30 02:25:53 24 4
gpt4 key购买 nike

我有不同的非常大的文件集,我想将它们放在不同的子文件夹中。对于我要使用的每个文件夹,我已经有了一个连续的 ID。我想将 ID 从右边拆分为在更深层次中始终有 1000 个文件夹。

示例:

id: 100243 => resulting_path: './100/243'

id: 1234567890 => 结果路径:'1/234/567/890'

我找到了 Split string every nth character? ,但是所有的解决方案都是从左到右的,我也不想为一行代码导入另一个模块。

我当前(有效)的解决方案如下所示:

import os

base_path = '/home/made'
n=3 # take every 'n'th from the right
max_id = 12345678900
test_id = 24102442

# current algorithm
str_id = str(test_id).zfill(len(str(max_id)))
ext_path = list(reversed([str_id[max(i-n,0):i] for i in range(len(str_id),0,-n)]))
print(os.path.join(base_path, *ext_path))

输出为:/home/made/00/024/102/442

对于我想做的简单事情来说,当前的算法看起来既笨拙又复杂。我想知道是否有更好的解决方案。如果没有,无论如何它可能会帮助其他人。

更新:

我非常喜欢 Joe Iddon 的解决方案。使用 .join 和 mod 使其更快、更易读。

最后我决定我永远不想在前面有一个/。为了在 len(s)%3 为零的情况下去掉前面的 /,我将行更改为

'/'.join([s[max(0,i):i+3] for i in range(len(s)%3-3*(len(s)%3 != 0), len(s), 3)])

感谢您的大力帮助!

更新 2:

如果你打算使用 os.path.join(就像我之前的代码),它会更简单,因为 os.path.join 会处理参数本身:

ext_path = [s[0:len(s)%3]] + [s[i:i+3] for i in range(len(s)%3, len(s), 3)]
print(os.path.join('/home', *ext_path))

最佳答案

你可以调整你链接的答案,并利用 mod 的美来创建一个漂亮的小 one-liner :

>>> s = '1234567890'
>>> '/'.join([s[0:len(s)%3]] + [s[i:i+3] for i in range(len(s)%3, len(s), 3)])
'1/234/567/890'

如果您希望它为您的第一个示例的情况自动添加 dot:

s = '100243'

然后你可以只添加一个迷你三元按照or的建议使用@MosesKoledoye:

>>> '/'.join(([s[0:len(s)%3] or '.']) + [s[i:i+3] for i in range(len(s)%3, len(s), 3)])
'./100/243'

此方法也将比 reversing 之前的 stringreversing a list 更快。

关于python - 从右边开始每隔第 n 个字符拆分字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47290962/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com