繁体   English   中英

Python - 字符串按模板拆分为列

[英]Python - string split into columns by template

我有空格的字符串,我想插入逗号,变成基于模板的,我定义成一个列表的特定位置。

例如:

  1. 输入

    String_in = "{080002092014Mark 21022017392 Ert02 stereo-Gaman09 39-934.4930start 23kg0093029 }" Template = [2,5,13,21,29,30,33,39,44,55,61,63,65,77]
  2. 输出

    String_out = "{0,800,02092014,Mark ,2102201,3,92 ,Ert02 ,stereo-Gaman09 ,39-934.4930,start ,23,kg,0093029 ,}

代码尝试:

def my_f(string, template, comma):
    for i in template:
        print(string[:i] + comma + string[i:])
my_f("asd asdget t45 4", {1,3,7}, ",")

输出:

a,sd asdget t45 4
asd, asdget t45 4
asd asd,get t45 4

所有逗号应该只有 1 行,而不是 3 行。

你可以这样做:

def split_by_template(s, template, sep=","):
  output_pieces = []
  prev_pos = 0
  for i in template + [len(s)]:
    output_pieces += [s[prev_pos:i]]
    prev_pos = i
  return sep.join(output_pieces)

或者更简洁的解决方案:

def split_by_template(s, template, sep=","):
  return sep.join(s[a:b] for a, b in zip([0] + template, template + [len(s)]))

这基本上将每个模板位置与前一个位置压缩在一起,因此像[1, 2, 5]这样的模板会产生成对的[(0, 1), (1, 2), (2, 5), (5, len(str)] . 注意我们在开头和结尾都加了一个额外的 [0] 和 [len(str) ,所以第一部分和最后部分是正确的。

然后剪下字符串的相关部分,并用逗号将它们连接起来。

您可以使用字符串切片来获取字符串的部分并制作部分列表。 然后使用 ','.join(lst) 得到结果。

循环遍历模板值,记住之前的值(比如 pos1 和 pos2)。 String_in[pos1:pos2] 获取部分。 最后一部分将是 String_in[pos1:]。 pos1 将被初始化为零,pos2 将是循环变量——在循环结束时分配给 pos1。

lst = []
pos1 = 0
for pos2 in Template:
    lst.append(String_in[pos1:pos2])
    pos1 = pos2
lst.append(String_in[pos1:])
String_out = ','.join(lst)

类似的东西,但没有经过测试——不是在使用 Python 的计算机上。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM