首页 > 解决方案 > 将字符串文件转换为所需格式:将 / 替换为 _,逗号前除外

问题描述

我需要以特定格式隐藏文件。

这是示例:

>>> x = "abc/xyz/abc/xyz/ab_c : abc/xyz/abc/xyz/ab_c,ab_c/xy_z/ab_c/xy_z/ab_c/xy_z,1"

我需要将所有的替换/_之前,和之后的空格,

需要的输出:

>>> 'abc_xyz_abc_xyz_ab_c : abc_xyz_abc_xyz/ab_c, ab_c_xy_z_ab_c_xy_z_ab_c/xy_z, 1'

我尝试替换/为,_但在这种情况下,我无法排除/之前,的 .

>>> x.replace("/", "_").replace(",", ", ")
'abc_xyz_abc_xyz_ab_c : abc_xyz_abc_xyz_ab_c, ab_c_xy_z_ab_c_xy_z_ab_c_xy_z, 1'

有没有其他方法可以实现这一目标?提前致谢。

标签: pythonpython-2.7

解决方案


zip()您的拆分 (at '/') 文本,其自身移动 1 并使用正确的中间值将其重新组合在一起:

x = "abc/xyz/abc/xyz/ab_c : abc/xyz/abc/xyz/ab_c,ab_c/xy_z/ab_c/xy_z/ab_c/xy_z,1"

parts = x.split("/")
pp = zip(parts,parts[1:])

l = []
for at,after in pp:
    if ',' in after:
        l.extend([at,'/'])
    else:
        l.extend([at,'_'])
l.append(after)  

# join and add spaces after ,
new_t = ''.join(l).replace(",",", ")
print(new_t) 
print('abc_xyz_abc_xyz_ab_c : abc_xyz_abc_xyz/ab_c, ab_c_xy_z_ab_c_xy_z_ab_c/xy_z, 1')

输出:

abc_xyz_abc_xyz_ab_c : abc_xyz_abc_xyz/ab_c, ab_c_xy_z_ab_c_xy_z_ab_c/xy_z, 1
abc_xyz_abc_xyz_ab_c : abc_xyz_abc_xyz/ab_c, ab_c_xy_z_ab_c_xy_z_ab_c/xy_z, 1

压缩的东西看起来像这样:

# pp splitted zipped with itself, shifted by 1
[('abc', 'xyz'), ('xyz', 'abc'), ('abc', 'xyz'), ('xyz', 'ab_c : abc'), 
 ('ab_c : abc', 'xyz'), ('xyz', 'abc'), ('abc', 'xyz'), ('xyz', 'ab_c,ab_c'),
 ('ab_c,ab_c', 'xy_z'), ('xy_z', 'ab_c'), ('ab_c', 'xy_z'), ('xy_z', 'ab_c'),
 ('ab_c', 'xy_z,1')]

此代码使用 python 3 样式打印 - 但它在 python 2 中也能正常工作


推荐阅读