On 02/03/2012 10:46 AM, Simeon Tesfaye wrote:
Hello everyone,

Two thoughts, but realize I don't know anything about pyshp.
I am having a bit of trouble here with my code, which uses a shapefile library, 
named pyshp, to import, edit, and save GIS files within Python.
So, I open up my shapefile (data is polylines, meaning, not points or polygons)
"shapefile=shapefile.Reader("file.shp")
shps=shapefile.shapes()
shprec = shapefile.records()
"
Then I carry out some edits, and I save my file.
1) Do you close the file?
When I want to open it again, within the same script, in order to access some 
of the data I just modified, I get this message :

"Traceback (most recent call last):
   File "<pyshell#9>", line 1, in<module>
     troncop=troncon.shapes()
   File "C:\Python25\Lib\shapefile.py", line 310, in shapes
     while shp.tell()<  self.shpLength:
   File "C:\Python25\Lib\shapefile.py", line 222, in __shape
     print(f.read(8))
2) Did you add that line? I'm guessing you inserted that right before a read() , so you could see what the data looks like. But this statement reads the 8 bytes and prints them, then throws them away. So the original read() that follows will get the next 8 bytes of the file, which might not look right.
   File "C:\Python25\lib\struct.py", line 87, in unpack
     return o.unpack(s)
error: unpack requires a string argument of length 8"


I reckon this part tries to import header information for shape data, which would be 
stored in C (?), and fails to "unpack" it in PYTHON.

I've tried putting an "IF" to check whether f.read(8) was actually a string 
(type) and of length equal to 8. I still get the same error message.
I've also tried skipping the "unpack" part altogther, not with much success.

I'm really not too familiar with Python, si if anyone could help me out with 
this, I'd be really grateful.

You should supply a link to the pyshp so that people who are willing to install it, will be sure to get the same one you did. Likewise any other environmental data about your system. I can tell you're running Python 2.5 on some Windows system, but it'd be nice if you just said so.

Other thoughts: If there's any binary data in that file, you might need to open it with a "b" mode. Without it Windows will convert crlf into linefeeds, which you don't want to do if it's binary data. We don't see your open here, so who knows?


--

DaveA

_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor

Reply via email to