[英]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.