2017-03-09 97 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

嗨,哥們,我喜歡你的方法,很聰明的舉動。 –

相關問題