2017-08-15 60 views
1

我想將csv的多行上的字符串拆分爲三個子字符串,我需要保留在同一行上,同時還在子行上添加單引號字符串2和3在行後面加一個逗號。Python將字符串拆分爲多個具有單引號和尾隨逗號的子字符串

在CSV的線條採用以下格式:

12345678/ABCDE.pdf 
12345678/ABCDE.pdf 
12345678/ABCDE.pdf 

由於我是新來的Python,我試圖在返回前兩個子串不上的行分流/但我我不知道如何獲得最終的期望輸出。

'12345678', 'ABCDE.pdf'

我想輸出看起來像下面

12345678,'/ABCDE.pdf','ABCDE', 
12345678,'/ABCDE.pdf','ABCDE', 
12345678,'/ABCDE.pdf','ABCDE', 

與包含PDF格式的無標題的最後一個字符串文件擴展名。

任何幫助將不勝感激。

+0

因此再次分割... –

回答

1

再次採用分體式,您可以輕鬆地構建所需的輸出字符串,而不需要正則表達式。

In [22]: %%timeit 
    ...: s = '''12345678/ABCDE.pdf 
    ...: 12345678/ABCDE.pdf 
    ...: 12345678/ABCDE.pdf''' 
    ...: for l in s.splitlines(): 
    ...:  s_parts = l.split('/') 
    ...:  new_s = '{},\'/{}\',\'{}\','.format(s_parts[0], s_parts[1], s_parts[1].split('.')[0]) 
    ...: 
100000 loops, best of 3: 3.55 µs per loop 

輸出:

Out[24]: "12345678,'/ABCDE.pdf','ABCDE'," 

爲了比較,貼在正則表達式的解決方案,也能正常工作具有以下運行時性能。這裏的績效差異不是太重要,但是要處理大量的項目,這可能是一個因素。

In [25]: %%timeit 
    ...: s = ["12345678/ABCDE.pdf", 
    ...:  "12345678/ABCDE.pdf", 
    ...:  "12345678/ABCDE.pdf"] 
    ...: new_s = [[re.findall("\d+", i)[0], "/"+i.split("/")[-1], re.findall("[A 
    ...: -Z]+", i)[0]] for i in s] 
    ...: 
100000 loops, best of 3: 11.6 µs per loop 
0

您可以使用re.split()re.findall()

s = ["12345678/ABCDE.pdf", 
     "12345678/ABCDE.pdf", 
     "12345678/ABCDE.pdf"] 
new_s = [[re.findall("\d+", i)[0], "/"+i.split("/")[-1], re.findall("[A-Z]+", i)[0]] for i in s] 

輸出:

[['12345678', '/ABCDE.pdf', 'ABCDE'], ['12345678', '/ABCDE.pdf', 'ABCDE'], ['12345678', '/ABCDE.pdf', 'ABCDE']] 
相關問題