Python 2.7,将用户输入写入新的输出文件

时间:2015-06-24 00:37:32

标签: python python-2.7

我正在尝试获取包含多个条目的文件并将其写入新文件。新文件应包含在单独列表中的逗号数据的拆分和拆分。一旦我这样做,我想用第3行(观察到的)和第4行(预期的)计算z得分。我使用的z得分公式是Zi =(Observed i - Expected i)/ sqrt(Expected i)。然后我想将Zscores添加到输入文件中的数据列表中,这是我遇到麻烦的地方。我正在使用output_file = open(outpath,“w”)但没有任何内容被写入输出文件。

示例input_file数据: Ashe,1853282.679,1673876.66,1,2 Alleghany,1963178.059,1695301.229,0,1 Surry,2092564.258,1666785.835,5,6 Currituck,3464227.016,1699924.786,1,1 Northampton,3056933.525,1688585.272,9,3 Hertford,3180151.244,1670897.027 ,7,3 Camden,3403469.566,1694894.58,0,1 Gates,3264377.534,1704496.938,0,1 Warren,2851154.003,1672865.891,4,2

我的代码:

   import os
from math import sqrt
def calculateZscore(inpath,outpath):
    "Z score calc"
    input_file = open(inpath,"r")
    lines = input_file.readlines()
    output_file = open(outpath,"w")


    county = []
    x_coor = []
    y_coor = []
    observed = []
    expected = []
    score = 0
    result = 0



    for line in lines:
        row = line.split(',')
        county.append(row[0].strip())
        x_coor.append(row[1].strip())
        y_coor.append(row[2].strip())
        observed.append(int(row[3].strip()))
        expected.append(int (row[4].strip()))

    o = observed
    e = expected
    length_o = len(o)
    length_e = len(e)
    score = 0
    for i in range(length_o):
        score += (o[i] - e[i])
        result += (score/(sqrt(e[i])))







def main():
    "collects data for code "
workingDirec = raw_input("What is the working directory?")
original_file = raw_input("The input filename is?")
full_original = os.path.join(workingDirec,original_file)
chi_square = raw_input("The name of the chi-squared stats table file is?")
full_chi_square = os.path.join(workingDirec,chi_square)
output_file = raw_input ("What is the output filename?")
full_output = os.path.join(workingDirec,output_file)

calculateZscore(full_original,full_output)

任何指导都将不胜感激

2 个答案:

答案 0 :(得分:1)

问题是代码input_file = open(inpath,"r")中的访问模式,您在只读模式下打开文件,您也需要提供写入权限。

  

r打开一个只读的文件

以下是一些关于写入文件的权限模式。你可以给任何适合你的

file = open('myfile.txt', 'r+')

  

r+打开文件进行读写。文件指针放在文件的开头。

file = open('myfile.txt', 'w+')

  

w+打开文件进行书写和阅读。如果文件存在,则覆盖现有文件。如果该文件不存在,则创建一个用于读写的新文件。

file = open('myfile.txt', 'a+')

  

a+打开文件以进行追加和阅读。如果文件存在,则文件指针位于文件的末尾。该文件以追加模式打开。如果该文件不存在,则会创建一个用于读写的新文件。

然后你也需要写那个文件.. 您可以实现一个简单的解决方法,

file = open('myfile.txt', 'r+')
file.write( "Python \n");
file.close()

答案 1 :(得分:1)

为了写入文件对象,需要为以write(“w”),append(“a”),read / write(“r +”)打开的文件对象调用fileobj.write(),或附加/写入模式(“a +”)。

您需要在功能结束时的某个时刻致电:

output_file.write(str(result))  # want character representation

例如:

for i in range(length_o):
    score += (o[i] - e[i])
    result += (score/(sqrt(e[i])))
output_file.write(str(result))

然后,最后,您应该关闭该文件 output_file.close()

(这是为了防止你多次调用一个特定模块,最好关闭你打开的所有文件对象。通常这是通过“with open(filename,mode)as e”来完成的。