元组重排列

2024-10-16 20:50:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下代码:

check = open(a, 'r')
line =check.readlines()
for items in line:
    breakup= items.split()
    length = (len(breakup)-1)
    number[0], salary[1], position[2], oname[3:length], first[-1] = breakup
    data.append(tuple([first, oname, number, position, salary]))

这段代码从包含通用信息的文本文件中读取,例如:

15674 24000 Manager Gregory the 1st John

我正在尝试使用for循环将信息按我要求的顺序附加到数据中,这样上面的信息将显示为:

('John', 'Gregory the 1st', 15674, 'Manager', 24000)

我之所以把oname从第3位切到倒数第二位,是因为oname可以是任意数量的名字,但是名字总是一个项目,所以我100%确定我可以从位置[-1]调用它

我的问题是它不起作用。代码将读取正确的文件,并正确地打破它,但我不能得到它重新安排正确。你知道吗


Tags: 代码信息numberforchecklinemanagerposition
2条回答

您需要以不同的方式分割线,然后分配部分而不分配索引和切片:

number, salary, position, rest = items.split(None, 3)
oname, first = rest.rsplit(None, 1)
data.append((first, oname, number, position, salary))

这将保留oname字段中的空格。第一个调用只拆分3次,给出前三个字段和一个余数。然后将rest中的剩余部分从右侧拆分一次,得到onamefirst。你知道吗

演示:

>>> items = '15674 24000 Manager Gregory the 1st John\n'
>>> number, salary, position, rest = items.split(None, 3)
>>> oname, first = rest.rsplit(None, 1)
>>> first, oname, number, position, salary
('John', 'Gregory the 1st', '15674', 'Manager', '24000')

这个怎么样?它将每一行分割成标记,然后将每个标记放在适当的位置。你做的事情是逆向的-你应该索引标记列表,而不是你想分配给他们的变量。这假设“manager”将不包含空格—否则,manager和name将不明确。你知道吗

data = []
with open(a,r) as f:
    for lines in f:
        toks = lines.split()
        data.append((toks[-1], toks[3:-1], int(toks[0]), toks[2], int(toks[1])))

这将使oname成为一个单词列表,而不是一个包含空格的字符串。如果希望它是一个字符串,只需将toks[3:-1]替换为" ".join(toks[3:-1])。你知道吗

相关问题 更多 >