모든 x ad y 좌표 (래스터 레이어의 각 픽셀 중앙에 위치)를 텍스트 파일의 목록으로 저장하려고합니다. 먼저 테스트를 위해 코드 아래에 올바른 코드를 작성합니다.목록을 텍스트 파일로 저장하는 방법은 무엇입니까?
import os
import pickle
mylist = [(12, 25), (65, 96), (10, 15)]
path = r"data/listfile"
file = 'file.txt'
if not os.path.exists(path):
os.makedirs(path)
with open(os.path.join(path, file), 'wb') as handle:
pickle.dump(mylist, handle)
with open(os.path.join(path, file), 'rb') as handle:
aa = pickle.loads(handle.read())
print aa
다음 단계에서는이 코드를 실제 래스터 레이어로 사용했습니다. 그 코드의 MCVE는 다음과 같습니다
from qgis.core import *
from PyQt4 import *
import os
import pickle
ds = QgsRasterLayer("/LData/Pop/lorst.tif", "Raster")
pixelWidth = ds.rasterUnitsPerPixelX()
pixelHeight = ds.rasterUnitsPerPixelY()
originX, originY = (ext.xMinimum(), ext.yMinimum())
src_cols = ds.width()
src_rows = ds.height()
path = r"LData/Pop"
file = 'List.txt'
if not os.path.exists(path):
os.makedirs(path)
def pixel2coord(x, y):
xp = (pixelWidth * x) + originX + (pixelWidth/2)
yp = (pixelHeight * y) + originY + (pixelHeight/2)
return QgsPoint(xp, yp)
list =[]
for i in range(0, src_cols):
for j in range(0, src_rows):
rspnt = pixel2coord(i, j)
list.append(rspnt)
with open(os.path.join(path, file), 'wb') as handle:
pickle.dump(list, handle)
with open(os.path.join(path, file), 'rb') as handle:
lst = pickle.loads(handle.read())
하지만이 오류 접수 :
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "/tmp/tmp4rPKQ_.py", line 70, in <module>
pickle.dump(pntRstList, handle)
File "/usr/lib/python2.7/pickle.py", line 1376, in dump
Pickler(file, protocol).dump(obj)
File "/usr/lib/python2.7/pickle.py", line 224, in dump
self.save(obj)
File "/usr/lib/python2.7/pickle.py", line 286, in save
f(self, obj) # Call unbound method with explicit self
File "/usr/lib/python2.7/pickle.py", line 606, in save_list
self._batch_appends(iter(obj))
File "/usr/lib/python2.7/pickle.py", line 621, in _batch_appends
save(x)
File "/usr/lib/python2.7/pickle.py", line 306, in save
rv = reduce(self.proto)
File "/usr/lib/python2.7/copy_reg.py", line 71, in _reduce_ex
state = base(self)
TypeError: the sip.wrapper type cannot be instantiated or sub-classed
텍스트 파일로 XY 목록을 변환 할 수있는 방법이 있나요를 다시 숫자 형식이 str에하지에 읽어?
당신은 아마 당신의 자신의 일 직렬화를하고있는 (그리고 구문 분석)을 코딩 할 필요가 –
'때문에 sip.wrapper 쉽게 튜플의리스트에 같은 지점의 목록을 변환 할 수 있습니다 말했다 '인스턴스화 할 수 없거나 하위 클래스로 분류 할 수 없습니다. 다른 것으로 교체해야합니다. 그러나 질문에 MCVE를 제공하지 않으므로이 질문에 답할 수 없습니다. –
또한 텍스트 파일에 저장하지 않고 그 사전에서 피클 오류가 발생하지 않습니다 –