1

我定义了一个函数(过程)来读取文件。我希望它返回包含我想从文件中读取的数据的数组,如下所示:

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 一直在列表中。

4

3 回答 3

3

线

Ta = np.array(Ta,dtype=np.float)

从列表的内容创建一个的数组对象Ta,然后将此数组分配给本地标识符Ta。它不会更改引用列表的全局变量。

Python 没有“变量”。它有标识符。这样做时,a = b您只需说“将名称a绑定到绑定到的对象b”。这a只是一个可用于检索对象的标签。如果您这样做a = 0,您正在重新绑定标签a,但这不会影响绑定到的对象b。标识符不是内存位置。

要将结果数组传递出函数,您可以:

  • 返回它们并重新分配全局Ta.
  • 直接赋值给全局变量。但是,为了做到这一点,Ta应该给本地人一个新名称,并且您必须使用该global语句(注意:避免使用此解决方案。)
于 2013-10-14T11:48:54.647 回答
1

也许你可以简单地做:

dayVan, Tpv, Tav = np.loadtxt(fname, usecols=(1,7,8), skiprows=7, delimiter=',', unpack=True)
于 2013-10-14T11:48:26.883 回答
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)
于 2013-10-14T11:48:42.397 回答