我定义了一个函数(过程)来读取文件。我希望它返回包含我想从文件中读取的数据的数组,如下所示:
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仍然是名单。
答案 0 :(得分:3)
该行
Ta = np.array(Ta,dtype=np.float)
从列表Ta
的内容创建 new 数组对象,然后将此数组分配给本地标识符Ta
。它确实不更改引用列表的全局。
Python没有“变量”。它有标识符。在执行a = b
时,您只需说“将名称a
绑定到绑定到b
的对象”。 a
只是一个可用于检索对象的标签。如果您执行a = 0
,则会重新绑定标签a
,但不会影响绑定到b
的对象。标识符不内存位置。
要将结果数组传递出函数,您可以:
Ta
。Ta
指定一个新名称和,您必须使用global
语句(注意:避免这个解决方案。)答案 1 :(得分:1)
也许你可以这样做:
dayVan, Tpv, Tav = np.loadtxt(fname, usecols=(1,7,8), skiprows=7, delimiter=',', unpack=True)
答案 2 :(得分:1)
转换已正确完成,但仅限于您的功能。
尝试在函数结束时返回day,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)