2017-04-14 62 views
0

我有以下元組格式的Python:拆分行與多個分隔符和返回的特定格式

ABC-01 name1,10 
    DEF-02 name2,11 
    GHI-03 name3,12 
    JKH-04 name4,13 

我可能無法使用進口再一個txt文件。不需要重新做。

我需要分隔元組的分隔符(ABC-01和其他人是一個詞,我需要保留連字符)。我的輸出需要有如下

格式所需要的結果的

 Out[]: 
      [(u'name1', u'ABC-01 10'), 
      (u'name2', u'DEF-02 11'), 
      (u'name3', u'GHI-03 12 '), 
      (u'name4', u'JKL-04 13')] 

這是我曾嘗試到現在,輸出我得到

解決方案1:

   def split_func(line): 
       line_mod = line.split(' ') 
       line_mod1 = line_mod.split(',') 
       print line_mod1 

結果

 Attribute Error : list object has no attribute split 

解決方案2:

  def split_func(line): 
       line_mod = line.split(' ') 
       a,b,c = str(line_mod).split(',') 
       return (b,a + " " + c) 

結果

   [(" u'name1", "[u'ABC-01' 10]"), 
       (" u'name2", "[u'DEF-02' 11]"), 
       (" u'name3", "[u'GHI-03' 12]"), 
       (" u'name4", "[u'JKL-04' 13]")] 

我如何得到我試圖得到確切的格式?

回答

1

這是下面的re示例。

import re 


def main(): 
    result = [] 
    with open("test.txt") as f: 
     for line in f: 
      result.append(split_func(line.strip())) 
    print(result) 


def split_func(line): 
    a, b, c = re.split("\s|,+", line) 
    return b, a + " " + c 

if __name__ == '__main__': 
    main() 

OR

這裏是一個沒有re

def main(): 
    result = [] 
    with open("test.txt") as f: 
     for line in f: 
      result.append(split_func(line.strip())) 
    print(result) 


def split_func(line): 
    a, b = line.split(' ') 
    b, c = b.split(',') 
    return b, a + " " + c 

if __name__ == '__main__': 
    main() 

隨着輸出看起來像這樣

[('name1', 'ABC-01 10'), ('name2', 'DEF-02 11'), ('name3', 'GHI-03 12'), ('name4', 'JKH-04 13')] 
+0

Thanks @DavidJones。第二個功能沒有按預期工作 – Raghu

+0

沒問題,很高興我幫助! – davidejones

0

你可以這樣做

def split_func(line): 
    a, b = line.split(' ') 
    c, d = b.split(',') 
    return c, ' '.join([a, d]) 

解決方案1 ​​不起作用,因爲split()返回一個列表,你不能在列表上使用split()

對於溶液2

x = ['ab', 'cd'] 

str(x)"['ab', 'cd']"

你需要的是join()功能。