元组重排Python

Sof*_*tey 1 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]))
Run Code Online (Sandbox Code Playgroud)

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

15674 24000 Manager Gregory the 1st John
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用for循环按照我提出的顺序将信息附加到数据,因此上述信息将如下所示:

('John', 'Gregory the 1st', 15674, 'Manager', 24000)
Run Code Online (Sandbox Code Playgroud)

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

我遇到的问题是它无法正常工作.代码将正确读取文件并正确分解,但我无法正确重新排列.

Mar*_*ers 5

您需要以不同方式拆分线,然后分配没有索引和切片分配的零件:

number, salary, position, rest = items.split(None, 3)
oname, first = rest.rsplit(None, 1)
data.append((first, oname, number, position, salary))
Run Code Online (Sandbox Code Playgroud)

这保留了场地中的空间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')
Run Code Online (Sandbox Code Playgroud)