加入python3

时间:2016-11-02 18:28:27

标签: python python-3.x

考虑以下字符串,该字符串表示制表符分隔的txt文件中的一行:

line = 'pf\t2\t0\t9\t0\t9\t9\n'

我想使用下划线连接此字符串中的前两个元素,然后将该行写回文件。我使用以下简单脚本来执行此操作:

newLabel = '_'.join(line.split('\t')[:2])
newLine = line.split('\t')
newLine[:2] = newLabel

我期望的是以下内容:

['pf_2', '0', '9', '0', '9', '9\n']

相反,我得到了:

['p', 'f', '_', '2', '0', '9', '0', '9', '9\n']

也许我错过了一些明显的东西,但为什么python再次拆分连接的字符串?实现我想要的最好方法是什么? 谢谢!

2 个答案:

答案 0 :(得分:3)

您可能正在寻找略有不同的任务声明:

newLine[:2] = [newLabel]

切片分配只需要在右侧进行迭代。由于newLabel,一个字符串, 是一个可迭代的,因此切片分配很愉快地进行迭代,并添加这些元素代替newLine[:2]

您可能还会考虑以下快捷方式:

>>> line.replace('\t', '_', 1)
'pf_2\t0\t9\t0\t9\t9\n'

使用str.replace的第三个参数指定要替换的出现次数。

答案 1 :(得分:2)

首先在toks中计算令牌,然后使用join为2个第一项重建列表,并为其余列表重建列表的其余部分:

line = 'pf\t2\t0\t9\t0\t9\t9\n'

toks = line.split('\t')
newLine = ["_".join(toks[:2])]+toks[2:]


print(newLine)

结果:

['pf_2', '0', '9', '0', '9', '9\n']