【问题标题】:Python csv input and output algorithmPython csv输入输出算法
【发布时间】:2017-07-06 06:38:01
【问题描述】:

我正在构建一个不使用模块的算法。 我的算法是从 111.txt 中计算每一行的值,其中有

2,2,2,2
4,4,0,4
2,3,3,3

到 222.txt。所以我想要的结果是

Column, Sum, Mean, STD, Median, Mode, Min, Max
1,8,2,0,2,2,2,2
2,12,3,2,4,4,0,4
3,11,2.75,0.5,3,3,2,3

我的算法是

infile = open("111.txt", "r")
outfile = open("222.txt", "w")

outfile.write("Column,Sum,Mean,STD,Median,Mode,Min,Max\n")

for line in infile:                             
    infileline = line.rstrip().split(",")
    infileline.sort()
    while line != "":
        total = float(infileline[0]) + float(infileline[1]) + float(infileline[2]) + float(infileline[3])
        mean = total / 4
        std =  ((float(infileline[0])**2 + float(infileline[1])**2 + float(infileline[2])**2 + float(infileline[3])**2) / 4) - mean**2
        median = (float(infileline[1]) + float(infileline[2])) / 2
        mode = 2
        minimum = float(infileline[0])
        maximum = float(infileline[3])
        line = infile.readline()

outfile.write("1")
outfile.write(",")
outfile.write("%1.0f" % total)
outfile.write(",")
outfile.write("%1.0f" % mean)
outfile.write(",")
outfile.write("%1.0f" % std)
outfile.write(",")
outfile.write("%1.0f" % median)
outfile.write(",")
outfile.write("%1.0f" % mode)
outfile.write(",")
outfile.write("%1.0f" % minimum)
outfile.write(",")
outfile.write("%1.0f\n" % maximum)

infile.close()
outfile.close()

但问题是我的算法只读取 111.txt 的第一行 所以222.txt上的结果是这样的

Column,Sum,Mean,STD,Median,Mode,Min,Max
1,8,2,0,2,2,2,2

还有,我想了很多,但是不知道列的算法和模式的算法怎么写。

【问题讨论】:

  • 谢谢你的帮助

标签: python-3.x


【解决方案1】:
  1. 结果文件以“w”模式打开(按最后一个值重写文件),只需使用“a”(追加)模式。
  2. 脚本只写入循环中的最后一个操作,您必须将写入块添加到循环中。
  3. 你不需要这行line = infile.readline()

此代码必须如下所示:

infile = open("111.txt", "r")
outfile = open("222.txt", "a")
outfile.write("Column,Sum,Mean,STD,Median,Mode,Min,Max\n")
column = 0

for line in infile:
    if line:
        column += 1
        infileline = line.rstrip().split(",")
        infileline.sort()
        total = float(infileline[0]) + float(infileline[1]) + float(infileline[2]) + float(infileline[3])
        mean = total / 4
        std =  ((float(infileline[0])**2 + float(infileline[1])**2 + float(infileline[2])**2 + float(infileline[3])**2) / 4) - mean**2
        median = (float(infileline[1]) + float(infileline[2])) / 2
        mode = 2
        minimum = float(infileline[0])
        maximum = float(infileline[3])

        outfile.write(str(column)+',')
        outfile.write(','.join("%1.0f"%i for i in (total, mean, std, median,
                                                   mode, minimum, maximum)))
        outfile.write('\n')

infile.close()
outfile.close()

【讨论】:

  • 非常感谢。它工作得很好。我终于得到了正确的代码!我希望你有一个美好的一天!
猜你喜欢
  • 2013-11-25
  • 2021-02-27
  • 2021-03-04
  • 1970-01-01
  • 1970-01-01
  • 2020-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多