[英]Python - string split into columns by template
我有空格的字符串,我想插入逗号,
变成基于模板的,我定义成一个列表的特定位置。
例如:
输入
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]
输出
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.