TypeError:预期的str,字节或os.PathLike对象,而不是GeojsonFile

时间:2020-04-01 01:49:11

标签: python gridfs

数据文件=打开(文件名,“ r”); TypeError:预期的str,字节或os.PathLike对象,而不是GeojsonFile

有人可以帮我为什么会这样吗?我想以geojson格式读取空间数据。

我想将geojson数据存储到数据库中。我已经连接了数据库,它是MongoDB数据库。我使用gridfs克服了限制,但是首先我需要读取数据并将其存储到数据库中。

非常感谢

    #read in the spatial data
filename = "/dami_data/data1/countries.geojson"
geojfile = pygeoj.load(filename)
for feature in geojfile:
    print(feature.geometry.type)
    print(feature.geometry.coordinates)
datafile = open(filename, "r")
thedata = datafile.read()

#create a gridFS object 
filesystem = gridfs.GridFS(db, collection='data')

#write data to GridFS
myfile = filesystem.put(thedata, filename = "countries")
print ("Store to database :)")

#retrieve what was just stored/document
filesystem.get(myfile).read()

1 个答案:

答案 0 :(得分:1)

在您的代码中,filename是指GeojsonFile对象而不是文件名。

如果要原始读取的文件与pygeoj读取的文件相同,则应该这样做:

filename = "/dami_data/test_data/roads.geojson"
geojfile = pygeoj.load(filename)
for feature in geojfile:
    print(feature.geometry.type)
    print(feature.geometry.coordinates)
datafile = open(filename, "r")
thedata = datafile.read()
datafile.close()

尽管可以做到,但您应该考虑使用geojfile而不是再次读取文件。无论如何,它已经保存了您从该文件中需要的信息(如@Karl Knechtel在评论中指出的那样。)

如果没有,表示您想读取其他文件,则应传递文件名:

filename = "/dami_data/test_data/roads.geojson"
geojfile = pygeoj.load(filename)
for feature in geojfile:
    print(feature.geometry.type)
    print(feature.geometry.coordinates)
datafile = open("my_other_file_name", "r")
thedata = datafile.read()
datafile.close()

最后,如果您想获取该GeojsonFile的原始数据,请执行以下操作:

filename = "/dami_data/test_data/roads.geojson"
geojfile = pygeoj.load(filename)
for feature in geojfile:
    print(feature.geometry.type)
    print(feature.geometry.coordinates)
thedata = str(geojfile)