Python 属性错误';功能';对象没有属性';数据类型';

Python 属性错误';功能';对象没有属性';数据类型';,python,gis,python-2.x,raster,Python,Gis,Python 2.x,Raster,我认为这是一个简单的修复,可能是因为我是python的meh 我想做的是用这4个色带创建一个432的假彩色图像。最终要创建一个脚本来运行数百个这样的图像,但这显然是遥不可及的 我一直收到一个错误AttributeError:“function”对象没有属性“DataType” 如果输入数据类型ex:gdal.GDT\u Byte(我不完全理解)然后,我得到一个错误AttributeError:“function”对象没有属性“shape”,这让我相信这个光栅和我在类的类似函数中使用的光栅之间有什

我认为这是一个简单的修复,可能是因为我是python的meh

我想做的是用这4个色带创建一个432的假彩色图像。最终要创建一个脚本来运行数百个这样的图像,但这显然是遥不可及的

我一直收到一个错误
AttributeError:“function”对象没有属性“DataType”
如果输入数据类型ex:
gdal.GDT\u Byte
(我不完全理解)然后,我得到一个错误
AttributeError:“function”对象没有属性“shape”
,这让我相信这个光栅和我在类的类似函数中使用的光栅之间有什么不同,或者我在光栅中的读取根本是错误的

这是我的全部代码:

import os
from osgeo import gdal

#change directory to data location
data_folder = r'my directory'
os.chdir(data_folder)

#open the .tif file and its bands, make sure they opened properly
ds = gdal.Open('example.tif') 
if ds is None: 
    raise IOError('Cound not open raster ya n00b')
band1 = ds.GetRasterBand(1).ReadAsArray
if band1 is None:
    raise IOError('bandz 1 didnt make her dance')
band2 = ds.GetRasterBand(2).ReadAsArray
if band2 is None:
    raise IOError('bandz 2 didnt make her dance')
band3 = ds.GetRasterBand(3).ReadAsArray
if band3 is None:
    raise IOError('bandz 3 didnt make her dance')
band4 = ds.GetRasterBand(4).ReadAsArray
if band4 is None:
    raise IOError('bandz 4 didnt make her dance')

#Get the GeoTiff driver to create an output raster    
gtiff_driver = gdal.GetDriverByName('GTiff')

#Get the data type name
data_type = band1.DataType
data_type = gdal.GetDataTypeName(data_type)

test_1 = gtiff_driver.Create('test_v1.tif', ds.RasterXSize, ds.RasterYSize, 3, gdal.GDT_Byte)
if test_1 is None:
    raise IOError('Could not create raster test_1')

test_1.SetProjection(ds.GetProjection())
test_1.SetGeoTransform(ds.GetGeoTransform())

t1_band1 = test_1.GetRasterBand(1)
t1_band1.WriteArray(band4)

t1_band2 = test_1.GetRasterBand(2)
t1_band2.WriteArray(band3)

t1_band3 = test_1.GetRasterBand(3)
t1_band3.WriteArray(band2)

del t1_band1, t1_band2, t1_band3, test_1, ds 
我觉得我只是在这里装聋作哑,但我真的很感谢你的帮助。哦,我还在使用Python2,我知道我需要尽快切换。谢谢大家!

我想试试看

band1 = ds.GetRasterBand(1).ReadAsArray()
结尾有括号

括号是调用函数并获得结果的python语法。 如果没有括号,则将
band1
作为
ReadAsArray
函数的同义词。 这在其他情况下可能会有所帮助,您可以这样做

 band1 = ds.GetRasterBand(1).ReadAsArray    
 x = band1() 
哪个调用
ReadAsArray


但这不是您想要做的

函数通常没有属性,因此band1不是您认为的那样。作为一个粗略的猜测,如果您执行band1=ds.GetRasterBand(1.ReadAsArray(){注意结尾的括号}会发生什么呢?非常感谢!我需要在我的电脑上贴一张大便条,上面写着“别忘了你的括号”。