2017-03-09 41 views
1

假设我有一个如下所示的数组。将数组字符串格式化为以逗号分隔的文件

X = ['2.2 31452- MMMMM 25 EA  1.2 AC - Auto Uni','20Eye  Customer: 300xxxx  ','Order Number: 215987 Salesperson: Barbara'] 

正如你所看到的,没有可读格式,因为它不是空格分隔或制表符分隔。有些空间是单一的和他人2,3,4等而变化,我如何格式化数据,因此它的格式如下:

X = ['2.2,31452- MMMMM,25 EA,1.2 AC - Auto,Uni,20Eye,Customer: 300xxxx,Order Number: 215987,Salesperson: Barbara'] 

基本上我想写的结果到CSV文件。

+0

您是否有任何关于如何拆分输入的规则?例如,“25 EA”,为什么这是没有逗号的25 EA? –

+0

@Albert Lee嗨,这不会是一个大问题。 – Cesar

+1

我想我想出了规则,一个空间不是分隔符,但多个连续的空格应该是一个分隔符,我会为你写一个算法。 –

回答

3
X = ['2.2 31452- MMMMM 25 EA  1.2 AC - Auto Uni', '20Eye  Customer: 300xxxx  ', 
    'Order Number: 215987 Salesperson: Barbara'] 

delimiter = ',' 


def extract(s): 
    SPACE = ' ' 
    result = [] 
    start = 0 
    end = 0 
    already_encounter_space = False 
    continous_space = False 
    for idx, c in enumerate(s): 
     if c != SPACE: 
      if already_encounter_space: 
       if continous_space: 
        result.append(s[start:end + 1]) 
        start = idx 
       else: 
        end = idx 
      else: 
       end = idx 
      already_encounter_space = False 
      continous_space = False 
     else: 
      if already_encounter_space: 
       continous_space = True 
      else: 
       already_encounter_space = True 
    result.append(s[start:end + 1]) 
    return result 


tmp = list() 
for s in X: 
    tmp.extend(extract(s)) 

X = [delimiter.join(tmp)] 

print X 

我们得到anwser这样的:

['2.2,31452- MMMMM,25 EA,1.2 AC - Auto,Uni,20Eye,Customer: 300xxxx,Order Number: 215987 Salesperson: Barbara'] 

请注意最后一个没有用逗号分隔,因为那里(THX到@YamanJain,谁提醒我之间只有一个空间这个问题)。这是你想要的吗?

+0

op的请求结果格式是你在没有之前如何做的? '[...订单编号:215987,销售员:芭芭拉]'用逗号 –

+0

@Albert Lee。这完美的作品!我会修改它,如果我需要我需要改变一些东西。但是我得到了你的方法的整体概念。再次感谢! :D – Cesar

+0

@JonathanPortorreal,我也发现了这一点,但似乎没有关于输入约束的规则。所以我只能把我自己作为先决条件。 –

0

您需要有一个分隔符,如果没有它,就无法实现目标。一旦你得到它,你可以简单地使用split方法。

4

您可以使用regular expression

re.sub(' +', ',', ' '.join(X)) 

输出与@albert相同,但不能调整它。

+0

嗨,哥们,我喜欢你的方法,很聪明的举动。 –

相关问题