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

3

我有以下代码:

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:新的
编辑2:
程序中出错的行是:os.system(var_four)

我们可以假设var_one是一个元组吗?你能给我们一个你代码的真实例子吗?这个链接中的信息有帮助吗?https://dev59.com/KVHTa4cB1Zd3GeqPNwBN - wkl
1
这些变量里面装了什么东西? - Amber
在问题中添加了变量是什么。 - Eden Crow
如问题所述,使用 str(var_one) 在这种情况下不起作用。 - Eden Crow
5个回答

4
one_big_string = ''.join(tuple)   
print one_big_string 

将代码缩进四个空格以将其放入块中,而不是使用内联反引号。 - Katriel
3
@katrielalex - 你不能告诉我如何生活!;) - prelic

3
您写的很好。
>>> 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

我需要var_four是一个字符串,这是我的问题。 - Eden Crow
已经更新了问题并提供了导致错误的代码行。 - Eden Crow
1
@EdenCrow:它不是一个字符串。你已经__定义__它不是一个字符串。它是一个元组。你可以使用多种方法将它转换成字符串,具体取决于你想要如何转换它。 - Katriel
1
@EdenCrow 看起来你想要 "".join(var_four),也就是你想连接元素 -- 但是使用subprocess.Popen是从Python调用外部程序的推荐方式。 - Katriel
那么在变量赋值中使用逗号会导致它变成一个元组?那么我如何将 string_twovar_one 相加并生成一个字符串呢? 编辑:被Ninja了 - 我会看一下 "".join(var_four) - Eden Crow
@katrielalex 请把你的回复移动到答案中。 - Edwin

2

您的代码看起来很好。

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

编辑:您应该使用''.join(var_four)var_four转换为字符串,然后再添加到想要使用的任何内容中。请注意,这实际上会创建一个新的字符串,而不是覆盖var_four。参见Python 3 string.join() 等效?

此外,您应该使用subprocess模块,而不是os.system。请参见Python 3.x文档


0

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。相反,请使用subprocess模块。

import subprocess 

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

command = binary_and_option + [directory]

subprocess.call(command)

0
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))'
>>> 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接