在列中按值重复文本行?

时间:2017-06-21 19:04:16

标签: python

我在制表符分隔的txt文件中有这样的输入(简化为4列;实际数据非常庞大):

FACTOR→NAME→SURNAME→ADDRESS
1→John→Smith→Chicago
3→Betty→Crawford→New York
2→Tom→Jonson→Chicago

我希望得到这个:

FACTOR→NAME→SURNAME→ADDRESS
1→John→Smith→Chicago
3→Betty→Crawford→New York
3→Betty→Crawford→New York
3→Betty→Crawford→New York
2→Tom→Jonson→Chicago
2→Tom→Jonson→Chicago

换句话说:我想根据FACTOR列中的值重复每一行。此值只能为number > 0。我怎么能用Python做到这一点?

2 个答案:

答案 0 :(得分:0)

您可以为此创建output.txt文件,并将上述行视为input.txt的一部分,您可以执行以下操作:

inp = open('input.txt', 'r')
lines = inp.readlines()
inp.close()

out = open('output.txt', 'w')
for line in lines:
    factor = int(line.split('\t')[0]) #splits on tab and gets the leftmost value, converts it to int
    out.write(line+'\n'*factor) #this writes the line desired number of times
out.close()

答案 1 :(得分:0)

使用Sam Chats提供的脚本我收到了这个错误:ValueError:int(无效)的基数为10的文字:'FACTOR' 我想这是因为列名FACTOR也在循环中用作乘法因子。我对脚本做了一些修改,得到了我需要的东西:

inp = open('input.txt', 'r')
out = open('output.txt', 'w')
header = inp.readline()
lines = inp.readlines()[0:]

out.write(header)

for line in lines:
    factor = int(line.split('\t')[0])
    out.write(line*factor)

inp.close()
out.close()

感谢您的提示!