将特定列中的数字乘以因子3

时间:2018-06-19 05:35:21

标签: python python-3.x numpy

我想将特定列中的所有数字(以下输入文件xyz.txt中的z列)乘以因子3并将其输出到文本文件中。当我运行./script.py xyz.txt > output.txt时,我收到此错误:

  

Traceback(最近一次调用最后一次):文件“./script.py”,第23行,in          sys.exit(main(sys.argv))文件“./script.py”,第18行,在main中       result.append(z.split('')[2] * 3)IndexError:列表索引超出范围

你知道我怎么能解决这个错误吗?

script.py:

#!/usr/bin/env python3

def main(argv):

    inputfile = open(argv[1])

    line = inputfile.readline()

    while line:
        print(line, end="")
        if line.startswith('[ xyz ]'):
            break
        line = inputfile.readline()

    result=[]
    for z in line:
        result.append(z.split(' ')[2]*3)
        print(z.rstrip(), '; modified')

if __name__ == "__main__":
    import sys
    sys.exit(main(sys.argv))

输入文件xyz.txt:

[ xyz ]
;     x     y      z  
     1.5   3.5     6.3
     2.4   4.2     2.4
     3.2   8.9     8.9
     4.3   2.1     9.2
     5.4   6.3     3.5 

请求的输出文件output.txt:

[ xyz ]
;     x     y      z  
     1.5   3.5    18.9 ; modified
     2.4   4.2     7.2 ; modified
     3.2   8.9    26.7 ; modified
     4.3   2.1    27.6 ; modified
     5.4   6.3    10.5 ; modified

1 个答案:

答案 0 :(得分:0)

import sys


def main(argv):

    inputfile = open(argv[1])

    line = inputfile.readline()

    result = []

    while line:

        # print(line, end="")
        # print(line)
        # print(len(line))
        # print(line.strip())
        # print(len(line.strip()))
        # print(line.strip().endswith("z"))
        # print("*" + line + "*")

        if line.strip().endswith("z"):
            result.append(line)
            line = inputfile.readline()
            continue


        # print()
        # print(line)
        # print("Z line")
        # print(line)
        # print(type(line))

        prev = line[:-5]
        z = line[-4:-1]

        # print(z)

        try:
            z = float(z)
        except ValueError:
            pass

        # print(type(z))
        # print()

        z = z * 3

        # print(z)

        z = str(z) + " ; modified"

        # print(z)

        output_line = prev + z

        # print(output_line)

        result.append(output_line)
        line = inputfile.readline()

    print(result)



if __name__ == "__main__":
    sys.exit(main(sys.argv))