簡體   English   中英

Python 3:將元組轉換為字符串

[英]Python 3: Converting A Tuple To A String

我有以下代碼:

var_one = var_two[var_three-1]
var_one = "string_one" + var_1

我需要做以下事情:

var_four = 'string_two', var_one

但是,這會返回以下錯誤:

TypeError: Can't convert 'tuple' object to str implicity

我已經嘗試過諸如str(var_one)和使用strip但是這些都沒有用。 我能做些什么才能達到我要求的效果?

編輯 - 以下是變量包含的內容:

var_one:新變量

var_two:元組

var_three:整數

var_four:new

EDIT2:

產生錯誤的程序中的行是: os.system(var_four)

one_big_string = ''.join(tuple)   
print one_big_string 

你寫的很好:

>>> x = 1
>>> y = 1, x
>>> 

問題是你的代碼中的其他地方,你使用var_four作為一個字符串,它應該是一個元組。

順便說一下,我覺得把括號放在像這樣的元組周圍是很簡潔的; 否則我傾向於認為它們被用於元組解包。


編輯:有各種各樣的方法來加入和格式化字符串--Python很擅長。 在某種程度上降低的普遍性順序:

"{first_thing} {second_thing}".format(first_thing=var_one, second_thing=var_two)

"{0} {1}".format(var_one, var_two)

var_one + var_two

你的代碼看起來很好。

嘗試運行import pdb; pdb.set_trace() import pdb; pdb.set_trace() ,看看是否可以找到觸發錯誤的行。

編輯:您需要使用''.join(var_four)var_four轉換為字符串,然后再將其添加到您想要使用它的任何內容中。 請注意,這實際上會創建一個新字符串,而不是覆蓋var_four 請參閱Python 3 string.join()等效?

此外,您應該使用subprocess os.system模塊而不是os.system 請參閱Python 3.x文檔

str(my_tuple)

這似乎太容易了,但這適用於Python 3.6

>>> x = list(range(100))
>>> y = list(range(500, 600))
>>> zip_obj = zip(x, y)
>>> my_tuple = tuple(zip_obj)
>>> type(my_tuple)
>>> <class 'tuple'>
>>> tuple_str = str(my_tuple)
>>> tuple_str
'((0, 500), (1, 501), (2, 502), (3, 503), (4, 504), (5, 505), (6, 506), (7, 507), (8, 508), (9, 509), (10, 510), (11, 511), (12, 512), (13, 513), (14, 514), (15, 515), (16, 516), (17, 517), (18, 518), (19, 519), (20, 520), (21, 521), (22, 522), (23, 523), (24, 524), (25, 525), (26, 526), (27, 527), (28, 528), (29, 529), (30, 530), (31, 531), (32, 532), (33, 533), (34, 534), (35, 535), (36, 536), (37, 537), (38, 538), (39, 539), (40, 540), (41, 541), (42, 542), (43, 543), (44, 544), (45, 545), (46, 546), (47, 547), (48, 548), (49, 549), (50, 550), (51, 551), (52, 552), (53, 553), (54, 554), (55, 555), (56, 556), (57, 557), (58, 558), (59, 559), (60, 560), (61, 561), (62, 562), (63, 563), (64, 564), (65, 565), (66, 566), (67, 567), (68, 568), (69, 569), (70, 570), (71, 571), (72, 572), (73, 573), (74, 574), (75, 575), (76, 576), (77, 577), (78, 578), (79, 579), (80, 580), (81, 581), (82, 582), (83, 583), (84, 584), (85, 585), (86, 586), (87, 587), (88, 588), (89, 589), (90, 590), (91, 591), (92, 592), (93, 593), (94, 594), (95, 595), (96, 596), (97, 597), (98, 598), (99, 599))'
>>> 

os.system需要一個將在shell中執行的字符串,但是你os.system它一個元組。

想象一下,我們想要運行命令rm -rf /home/mike 你可能會做類似的事情

binary_and_option = 'rm -rf'
directory = '/home/mike'

command = binary_and_option, directory # This is the tuple 
                                       #    ('rm -rf', '/home/mike') 
                                       # it is NOT the string 
                                       #     'rm -rf /home/mike'

os.system(command) # this clearly won't work, since it's just 
                   # os.system(('rm -rf', '/home/mike')) 

你想要做的是

command = "%d %d" % (binary_and_option, directory)

組裝字符串。 您可能認為逗號將stred ed對象與其間的空格組合在一起,但這僅用於print ; 一般來說,字符串不起作用。


等等 ,還有更多! 永遠不想使用os.system ,特別是當你要構建命令時。 它調用shell(引入了不必要的安全風險和其他懲罰)並且具有不靈活的API。 而是使用subprocess模塊。

import subprocess 

binary_and_option = ['rm', '-rf']
directory = '/home/mike'

command = binary_and_option + [directory]

subprocess.call(command)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM