2017-09-21 40 views
0

我想轉換雙元組,它看起來像這樣:轉換雙元組串

{tuple} <type 'list'>: ((u'833',), (u'765',) , 
(u'11',) , (u'56',) , (u'61',) , (u'84',)) 

這個字符串:

"833, 765, 11, 56, 61, 84" 

我試着這樣說:

query = double_tuple_from_above 
str = ["'{}' ".format(element) for element in query ] 
final_str = ', '.join(str) 
# aaaa = steamids64.replace("(", "',)") # does not work 

但結果看起來不合適,例如這樣:

final_str = '(u'833',)' , '(u'765',)' , '(u'11',)' , '(u'56',)' , '(u'61',)' , '(u'84',)' 

如何修平它?

回答

1
import re 

l = ["'(u'833',)' ", "'(u'765',)' ", "'(u'11',)' ", "'(u'56',)' ", "'(u'61',)' ", "'(u'84',)' "] 
result = [] 

for elem in l: 
    num = re.split(r'([0-9]+)', elem) 
    result.append(num[1]) 

print(", ".join(result)) 
1

你可以做一個正則表達式與聯接:

import re 
l = ["'(u'833',)' ", "'(u'765',)' ", "'(u'11',)' ", "'(u'56',)' ", "'(u'61',)' ", "'(u'84',)' "] 

', '.join([re.search("\d+", elem).group() for elem in l if re.search("\d+", elem)]) 

這產生了:

'833,765,11,56,61,84'

2

使用正則表達式,即替代的非數字用''使用list理解然後加入,

import re 
m = ["'(u'833',)' ", "'(u'765',)' ", "'(u'11',)' ", "'(u'56',)' ", "'(u'61',)' ", "'(u'84',)' "] 
new = ', '.join([re.sub('[^0-9]+' ,'', i) for i in m]) 

輸出:

'833, 765, 11, 56, 61, 84' 
2

您的輸入被搞砸了,可能值得修復上游。

如果你堅持與使用ast.literal_eval評估元組(從字符串的開始&結尾剝離報價&空格之後),採取的第一個項目,並加入回字符串:

l = ["'(u'833',)' ", "'(u'765',)' ", 
"'(u'11',)' ", "'(u'56',)' ", "'(u'61',)' ", "'(u'84',)' "] 

import ast 

s = ", ".join(y[0] for y in (ast.literal_eval(x.strip("' ")) for x in l)) 
print(s) 

結果:

833, 765, 11, 56, 61, 84 
1

在IPython中測試了這個。你應該只需要更深入。

Python 2.7.13 (default, Feb 4 2017, 17:39:59) 
Type "copyright", "credits" or "license" for more information. 

IPython 5.4.1 -- An enhanced Interactive Python. 
?   -> Introduction and overview of IPython's features. 
%quickref -> Quick reference. 
help  -> Python's own help system. 
object? -> Details about 'object', use 'object??' for extra details. 

In [1]: a = ((u'833',), (u'765',), (u'11',), (u'56',), (u'61',), (u'84',)) 

In [2]: a 
Out[2]: ((u'833',), (u'765',), (u'11',), (u'56',), (u'61',), (u'84',)) 

In [3]: flatter = (x[0] for x in a) 

In [4]: ret = ', '.join(flatter) 

In [5]: ret 
Out[5]: u'833, 765, 11, 56, 61, 84' 

In [6]: ret = ret.encode('utf8') 

In [7]: ret 
Out[7]: '833, 765, 11, 56, 61, 84'