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

时间:2017-02-12 09:58:56

标签: python string

我有一个带空格的字符串,我想根据我在列表中定义的模板将逗号port after save days {"id":3,"name":"\tXIAMEN","price_mk":0,"company_a_20":0,"company_a_40":0,"company_a_days":"\"444\"","company_a_json":"[{\"portName\":\"XIAMEN\",\"days\":\"4\",\"id\":\"3\",\"datefrom\":\"02\\\/02\\\/2017\",\"dateTo\":\"02\\\/28\\\/2017\",\"price_x\":4,\"prices_y\":4},{\"portName\":\"XIAMEN\",\"days\":\"12\",\"id\":\"3\",\"datefrom\":\"\",\"dateTo\":\"\",\"price_x\":0,\"prices_y\":0},{\"portName\":\"XIAMEN\",\"days\":\"333\",\"id\":\"3\",\"datefrom\":\"02\\\/08\\\/2017\",\"dateTo\":\"02\\\/23\\\/2017\",\"price_x\":12,\"prices_y\":12},{\"portName\":\"XIAMEN\",\"days\":\"444\",\"id\":\"3\",\"datefrom\":\"02\\\/09\\\/2017\"..., 插入特定位置。

例如:

  1. 输入

    n= raw_input("name :")
    pref = raw_input("preference :")
    
  2. 输出

    ,
  3. Code Tried:

    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   ,}
    

    只有1行包含所有逗号,而不是3行。

2 个答案:

答案 0 :(得分:1)

您可以执行以下操作:

gulp.task('watch', [], () => {
    console.log(" ");
    console.log("Watching for changes...");
    console.log(" ");
    gulp.watch([config.filters.app, config.filters.appModuleFiles], ['inject-js']);
    gulp.watch(config.filters.client, ['sass']);
})

或者更简洁的解决方案:

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]和[len(str),因此第一个和最后一个部分是正确的。

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

答案 1 :(得分:0)

您可以使用字符串切片来获取字符串的各个部分并列出部分列表。然后用 ','。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在计算机上。