Python 3:将元组转换为字符串

Python 3:将元组转换为字符串,python,string,variables,python-3.x,tuples,Python,String,Variables,Python 3.x,Tuples,我有以下代码: 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-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
的方法,但这些方法都不起作用。 我能做些什么来达到我所要求的结果

编辑-以下是变量包含的内容:

变量1:新变量

变量二:元组

变量三:整数

var_四:新

编辑2:


程序中出现错误的那一行是:
os.system(var\u four)

您的代码看起来很好

尝试运行
导入pdb;pdb.set_trace()
在程序中查看是否可以找到触发错误的行

编辑:您需要使用
''。join(var_-four)
var_-four
转换为字符串,然后再将其添加到您想要使用的任何字符串中。请注意,这实际上会创建一个新字符串,而不会覆盖
var\u four
。看


另外,您应该使用
子流程
模块,而不是
os.system
。请参阅。

您所写的内容很好:

>>> x = 1
>>> y = 1, x
>>> 
问题在于,在代码的其他地方,您使用了
var\u 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

os.system
需要一个字符串,该字符串将在shell中执行,但您给它一个元组

假设我们想要运行命令
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)
组装绳子。您可能认为逗号将str-ed对象组合在一起,并在它们之间加上空格,但这仅适用于
print
;一般来说,这不是字符串的工作方式


但是等等,还有更多从不想使用
os.system
,尤其是当您要生成命令时。它调用shell(这会带来不必要的安全风险和其他惩罚),并且具有不灵活的API。相反,请使用
子流程
模块

import subprocess 

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

command = binary_and_option + [directory]

subprocess.call(command)
这看起来太简单了,但在Python3.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))'
>>> 
>x=列表(范围(100))
>>>y=列表(范围(500600))
>>>zip_obj=zip(x,y)
>>>my_tuple=tuple(zip_obj)
>>>类型(我的元组)
>>> 
>>>tuple\u str=str(我的tuple)
>>>元组
'((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))'
>>> 

我们要假设
var\u one
是一个元组吗?你能给我们一个真实的代码示例吗?这个链接中的信息有用吗?嗯…这些变量中有什么?添加了要质疑的变量。@birrree如问题中所述,使用
str(var\u one)
在这种情况下不起作用。将代码缩进四个空格以将其放入一个块中,而不是使用内联倒勾。@Katrielex-你不能告诉我如何生活!;)我需要将var_-four转换为字符串,这是我的问题。用导致错误的行更新了问题。@EdenCrow:它不是字符串。您定义它不是字符串。它是元组。您可以用任何方式将它转换为字符串,具体取决于您希望转换的方式。@EdenCrow它看起来像是希望
“”。join(var_-four)
也就是说,您希望连接元素,但是子流程是
的。Popen
是从Python调用外部程序的推荐方法。因此,在变量赋值中使用
会使它成为元组?那么如何通过将
字符串两个
变量一个
添加在一起来生成字符串?编辑:Ninja'd-w我来看看
”。加入(变量四)
str(my_tuple)
>>> 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))'
>>>