我定义了一个函数(过程)来读取一个文件。我希望它用我想从文件中读取的数据返回数组,如下所示:
import csv
import numpy as np
import matplotlib.pyplot as plt
# Subroutine to read the day, Ta,Tp from a file and convert them into arrays
def readstr(fname,day,Ta,Tp):
van = open(fname,'r')
van_csv = van.readlines()[7:] # Skip seven lines
van.close() # close the file
van_csv = csv.reader(van_csv) # now the file is separated by colunms
for row in van_csv: # Passing the values of the each column to arrays
day.append(row[1])
Ta.append(row[8])
Tp.append(row[7])
day = np.array(day,dtype=np.integer)
Ta = np.array(Ta,dtype=np.float)
Tp = np.array(Tp,dtype=np.float)
van = "file"
# Defining the lists
dayVan = []
Tav = []
Tpv = []
readstr(van,dayVan,Tav,Tpv)
print Tav我认为这会有效,但是dayVan,Tpv,Tav仍然是列表。
发布于 2013-10-14 11:48:54
线
Ta = np.array(Ta,dtype=np.float)从列表Ta的内容创建一个新的数组对象,然后将该数组分配给本地标识符Ta。它确实是,而不是,它改变了引用列表的全局。
Python没有“变量”。它有标识符。在执行a = b时,只需简单地说“将名称a绑定到绑定到b的对象”。a只是一个可以用来检索对象的标签。如果然后执行a = 0,您将重新绑定标签a,但这会使而不是影响绑定到b的对象。标识符是,而不是内存位置。
要将结果数组从函数中传递出去,您可以:
Ta。Ta一个新的名称,您必须使用global语句(注意:避免此解决方案)。发布于 2013-10-14 11:48:26
也许你可以简单地做:
dayVan, Tpv, Tav = np.loadtxt(fname, usecols=(1,7,8), skiprows=7, delimiter=',', unpack=True)发布于 2013-10-14 11:48:42
转换是正确的,但只在函数内部完成。
试着返回一天,Ta和Tp在您的功能结束,并从调用者,它将更好地工作。
def readstr(fname):
van = open(fname,'r')
van_csv = van.readlines()[7:] # Skip seven lines
van.close() # close the file
van_csv = csv.reader(van_csv) # now the file is separated by colunms
day, Ta, Tp = [], [], []
for row in van_csv: # Passing the values of the each column to arrays
day.append(row[1])
Ta.append(row[8])
Tp.append(row[7])
day = np.array(day,dtype=np.integer)
Ta = np.array(Ta,dtype=np.float)
Tp = np.array(Tp,dtype=np.float)
return day, Ta, Tp
dayVan, Tav, Tpv = readstr(van)https://stackoverflow.com/questions/19359462
复制相似问题