Re: [Tutor] PYTHON QUOTES ISSUE
Hi Alan: The ouput is coming from a cicle and some functions that I vae to do to execute an ogr2ogr command, in this output I ask the user for the name of a file and then make a module to get to the subprocess part: import shlex, subprocess, sys from dbf import * def process(): #Read dbfile status 100% a = open (capas.txt,w+) print 'Enter the shapefile name' b = raw_input() print '\n' dbf = Dbf(b+.dbf,new=False) for rec in dbf: for fldName in dbf.fieldNames: if fldName == 'LAYER': l=() l=rec[fldName] a.write(l) a.write(\n) a.close() ##Eliminate duplicate lines from the txt into a new txt, status:100% a = open (capas.txt,r) catalogo = open (unico.txt,w) unique = set(a.read().split(\n)) catalogo.write(.join([line + \n for line in unique])) catalogo.close() a.close() ##Execute ogr2ogr command, status:75% for line in open(unico.txt, r): p = subprocess.Popen(['C:/Archivos de programa/FWTools2.4.7/bin/ogr2ogr', line+'.shp', '-where', \LAYER='+line+'\ , b+'.shp']) But when I executed it shows me an error in the layer's name: ERROR 1: Failed to identify field:LAYER= ERROR 1: Failed to create file .shp file. ERROR 4: Failed to open Shapefile `0 .shp'. I think the erros showed up because some of the layer's values are 0 and ' ', and obsviously you can't create a file from nothing on it. But I don`t know how to validate if a layer's value is equals to 0 or ' ', any idea what I'm doing wrong or how to fix it? 2010/10/7 Susana Iraiis Delgado Rodriguez susana.delgad...@utzmg.edu.mx Hello taserian and Antonio! Thank you both for taking the time to answer my question. With taserian's code it gives me the next output: C... ogr2ogr T21-PUENTESshp -where LAYER=T21-PUENTES tapalpa_05_plani_line.shp but the output I need is: C... ogr2ogr T21-PUENTESshp -where LAYER=' T21-PUENTES' tapalpa_05_plani_line.shp I did the Antonio's suggested corrections, and I got the string I wanted, now the problem is that my subprocess doesn't work properly, I'll give a look and see whats wrong with it. 2010/10/7 taserian taser...@gmail.com On Thu, Oct 7, 2010 at 12:48 PM, taserian taser...@gmail.com wrote: I'm adding some line breaks to make your text a little more readable. On Thu, Oct 7, 2010 at 9:55 AM, Susana Iraiis Delgado Rodriguez susana.delgad...@utzmg.edu.mx wrote: Hello members: How can I write a statement to execute the following: C:/Archivos de programa/FWTools2.4.7/bin/ogr2ogr R1G-GEODESIA.shp -where LAYER = 'R1G-GEODESIA' tapalpa_05_plani_point.dbf I want my uotput to look like this. Instead I'm getting this C:/Archivos de programa/FWTools2.4.7/bin/ogr2ogr T21-PUENTES.shp -where LAYER=+line tapalpa_05_plani_line.shp In miy code line is a string given by the user: for line in open(unico.txt, r).readlines(): p = subprocess.Popen(['C:/Archivos de programa/FWTools2.4.7/bin/ogr2ogr', line+'.shp', '-where', LAYER='line', b+'.shp']) Any suggestions? Without knowing specifics about what the subprocess.Popen function is expecting as parameters, I can only speculate, but it seems that the following *might* work (for extremely generous values of *might*): for line in open(unico.txt, r).readlines(): p = subprocess.Popen(['C:/Archivos de programa/FWTools2.4.7/bin/ogr2ogr', line+'.shp', '-where', \LAYER=' + line + '\, b+'.shp']) Details about where the changes are: \LAYER=' + line + '\ Begin corrections (corrections start with a *) Quote to begin the literal: An escaped quote (1) so that there's a quote inside the literal: \ Some of the text that's meant to be unchanging: LAYER= *Single Quote (2) to be included in the literal (which doesn't need to be escaped): ' Close Quote: Add the content of the variable line from the unico.txt file: + line + *Add another literal, composed of the single quote that closes (2) above, then the closing escaped quote to close (1) : '\ See if this works, and let us know how it turns out. Antonio Rodriguez End of corrections. Antonio Rodriguez ___ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor
Re: [Tutor] PYTHON QUOTES ISSUE
Besides, If I print the query, I have the next output: C:/Archivos de programa/FWTools2.4.7/bin/ogr2ogr U3B-BARDA .shp -where LAYER='U3B-BARDA ' tapalpa_05_plani_line.shp C:/Archivos de programa/FWTools2.4.7/bin/ogr2ogr N2H-TEMP .shp -where LAYER='N2H-TEMP ' tapalpa_05_plani_line.shp C:/Archivos de programa/FWTools2.4.7/bin/ogr2ogr U3C-CERCA .shp -where LAYER='U3C-CERCA ' tapalpa_05_plani_line.shp.. I thought it was a console print issue, but when I run the module from Eclipse, it shows the same enter space, so I think it maybe that the line is not together as it is a statement!! 2010/10/8 Susana Iraiis Delgado Rodriguez susana.delgad...@utzmg.edu.mx Hi Alan: The ouput is coming from a cicle and some functions that I vae to do to execute an ogr2ogr command, in this output I ask the user for the name of a file and then make a module to get to the subprocess part: import shlex, subprocess, sys from dbf import * def process(): #Read dbfile status 100% a = open (capas.txt,w+) print 'Enter the shapefile name' b = raw_input() print '\n' dbf = Dbf(b+.dbf,new=False) for rec in dbf: for fldName in dbf.fieldNames: if fldName == 'LAYER': l=() l=rec[fldName] a.write(l) a.write(\n) a.close() ##Eliminate duplicate lines from the txt into a new txt, status:100% a = open (capas.txt,r) catalogo = open (unico.txt,w) unique = set(a.read().split(\n)) catalogo.write(.join([line + \n for line in unique])) catalogo.close() a.close() ##Execute ogr2ogr command, status:75% for line in open(unico.txt, r): p = subprocess.Popen(['C:/Archivos de programa/FWTools2.4.7/bin/ogr2ogr', line+'.shp', '-where', \LAYER='+line+'\ , b+'.shp']) But when I executed it shows me an error in the layer's name: ERROR 1: Failed to identify field:LAYER= ERROR 1: Failed to create file .shp file. ERROR 4: Failed to open Shapefile `0 .shp'. I think the erros showed up because some of the layer's values are 0 and ' ', and obsviously you can't create a file from nothing on it. But I don`t know how to validate if a layer's value is equals to 0 or ' ', any idea what I'm doing wrong or how to fix it? 2010/10/7 Susana Iraiis Delgado Rodriguez susana.delgad...@utzmg.edu.mx Hello taserian and Antonio! Thank you both for taking the time to answer my question. With taserian's code it gives me the next output: C... ogr2ogr T21-PUENTESshp -where LAYER=T21-PUENTES tapalpa_05_plani_line.shp but the output I need is: C... ogr2ogr T21-PUENTESshp -where LAYER=' T21-PUENTES' tapalpa_05_plani_line.shp I did the Antonio's suggested corrections, and I got the string I wanted, now the problem is that my subprocess doesn't work properly, I'll give a look and see whats wrong with it. 2010/10/7 taserian taser...@gmail.com On Thu, Oct 7, 2010 at 12:48 PM, taserian taser...@gmail.com wrote: I'm adding some line breaks to make your text a little more readable. On Thu, Oct 7, 2010 at 9:55 AM, Susana Iraiis Delgado Rodriguez susana.delgad...@utzmg.edu.mx wrote: Hello members: How can I write a statement to execute the following: C:/Archivos de programa/FWTools2.4.7/bin/ogr2ogr R1G-GEODESIA.shp -where LAYER = 'R1G-GEODESIA' tapalpa_05_plani_point.dbf I want my uotput to look like this. Instead I'm getting this C:/Archivos de programa/FWTools2.4.7/bin/ogr2ogr T21-PUENTES.shp -where LAYER=+line tapalpa_05_plani_line.shp In miy code line is a string given by the user: for line in open(unico.txt, r).readlines(): p = subprocess.Popen(['C:/Archivos de programa/FWTools2.4.7/bin/ogr2ogr', line+'.shp', '-where', LAYER='line', b+'.shp']) Any suggestions? Without knowing specifics about what the subprocess.Popen function is expecting as parameters, I can only speculate, but it seems that the following *might* work (for extremely generous values of *might*): for line in open(unico.txt, r).readlines(): p = subprocess.Popen(['C:/Archivos de programa/FWTools2.4.7/bin/ogr2ogr', line+'.shp', '-where', \LAYER=' + line + '\, b+'.shp']) Details about where the changes are: \LAYER=' + line + '\ Begin corrections (corrections start with a *) Quote to begin the literal: An escaped quote (1) so that there's a quote inside the literal: \ Some of the text that's meant to be unchanging: LAYER= *Single Quote (2) to be included in the literal (which doesn't need to be escaped): ' Close Quote: Add the content of the variable line from the unico.txt file: + line + *Add another literal, composed of the single quote that closes (2) above, then the closing escaped quote to close (1) : '\ See if this works, and let us know how it turns out. Antonio Rodriguez End of corrections. Antonio Rodriguez ___ Tutor maillist - Tutor@python.org
[Tutor] PYTHON QUOTES ISSUE
Hello members: How can I write a statement to execute the following: C:/Archivos de programa/FWTools2.4.7/bin/ogr2ogr R1G-GEODESIA.shp -where LAYER = 'R1G-GEODESIA' tapalpa_05_plani_point.dbf, I want my uotput to look like this. Instead I'm getting this C:/Archivos de programa/FWTools2.4.7/bin/ogr2ogr T21-PUENTES.shp -where LAYER=+line tapalpa_05_plani_line.shp In miy code line is a string given by the user: for line in open(unico.txt, r).readlines(): p = subprocess.Popen(['C:/Archivos de programa/FWTools2.4.7/bin/ogr2ogr', line+'.shp', '-where', LAYER='line', b+'.shp']) Any suggestions? ___ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor
Re: [Tutor] PYTHON QUOTES ISSUE
I'm adding some line breaks to make your text a little more readable. On Thu, Oct 7, 2010 at 9:55 AM, Susana Iraiis Delgado Rodriguez susana.delgad...@utzmg.edu.mx wrote: Hello members: How can I write a statement to execute the following: C:/Archivos de programa/FWTools2.4.7/bin/ogr2ogr R1G-GEODESIA.shp -where LAYER = 'R1G-GEODESIA' tapalpa_05_plani_point.dbf I want my uotput to look like this. Instead I'm getting this C:/Archivos de programa/FWTools2.4.7/bin/ogr2ogr T21-PUENTES.shp -where LAYER=+line tapalpa_05_plani_line.shp In miy code line is a string given by the user: for line in open(unico.txt, r).readlines(): p = subprocess.Popen(['C:/Archivos de programa/FWTools2.4.7/bin/ogr2ogr', line+'.shp', '-where', LAYER='line', b+'.shp']) Any suggestions? Without knowing specifics about what the subprocess.Popen function is expecting as parameters, I can only speculate, but it seems that the following *might* work (for extremely generous values of *might*): for line in open(unico.txt, r).readlines(): p = subprocess.Popen(['C:/Archivos de programa/FWTools2.4.7/bin/ogr2ogr', line+'.shp', '-where', \LAYER=' + line + '\, b+'.shp']) Details about where the changes are: \LAYER=' + line + '\ Quote to begin the literal: An escaped quote (1) so that there's a quote inside the literal: \ Some of the text that's meant to be unchanging: LAYER= Close Quote: Add the content of the variable line from the unico.txt file: + line + Add another literal, composed of just the closing escaped quote to close the quote above (1) : \ See if this works, and let us know how it turns out. Antonio Rodriguez ___ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor
Re: [Tutor] PYTHON QUOTES ISSUE
On Thu, Oct 7, 2010 at 12:48 PM, taserian taser...@gmail.com wrote: I'm adding some line breaks to make your text a little more readable. On Thu, Oct 7, 2010 at 9:55 AM, Susana Iraiis Delgado Rodriguez susana.delgad...@utzmg.edu.mx wrote: Hello members: How can I write a statement to execute the following: C:/Archivos de programa/FWTools2.4.7/bin/ogr2ogr R1G-GEODESIA.shp -where LAYER = 'R1G-GEODESIA' tapalpa_05_plani_point.dbf I want my uotput to look like this. Instead I'm getting this C:/Archivos de programa/FWTools2.4.7/bin/ogr2ogr T21-PUENTES.shp -where LAYER=+line tapalpa_05_plani_line.shp In miy code line is a string given by the user: for line in open(unico.txt, r).readlines(): p = subprocess.Popen(['C:/Archivos de programa/FWTools2.4.7/bin/ogr2ogr', line+'.shp', '-where', LAYER='line', b+'.shp']) Any suggestions? Without knowing specifics about what the subprocess.Popen function is expecting as parameters, I can only speculate, but it seems that the following *might* work (for extremely generous values of *might*): for line in open(unico.txt, r).readlines(): p = subprocess.Popen(['C:/Archivos de programa/FWTools2.4.7/bin/ogr2ogr', line+'.shp', '-where', \LAYER=' + line + '\, b+'.shp']) Details about where the changes are: \LAYER=' + line + '\ Begin corrections (corrections start with a *) Quote to begin the literal: An escaped quote (1) so that there's a quote inside the literal: \ Some of the text that's meant to be unchanging: LAYER= *Single Quote (2) to be included in the literal (which doesn't need to be escaped): ' Close Quote: Add the content of the variable line from the unico.txt file: + line + *Add another literal, composed of the single quote that closes (2) above, then the closing escaped quote to close (1) : '\ See if this works, and let us know how it turns out. Antonio Rodriguez End of corrections. Antonio Rodriguez ___ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor
Re: [Tutor] PYTHON QUOTES ISSUE
Hello taserian and Antonio! Thank you both for taking the time to answer my question. With taserian's code it gives me the next output: C... ogr2ogr T21-PUENTESshp -where LAYER=T21-PUENTES tapalpa_05_plani_line.shp but the output I need is: C... ogr2ogr T21-PUENTESshp -where LAYER=' T21-PUENTES' tapalpa_05_plani_line.shp I did the Antonio's suggested corrections, and I got the string I wanted, now the problem is that my subprocess doesn't work properly, I'll give a look and see whats wrong with it. 2010/10/7 taserian taser...@gmail.com On Thu, Oct 7, 2010 at 12:48 PM, taserian taser...@gmail.com wrote: I'm adding some line breaks to make your text a little more readable. On Thu, Oct 7, 2010 at 9:55 AM, Susana Iraiis Delgado Rodriguez susana.delgad...@utzmg.edu.mx wrote: Hello members: How can I write a statement to execute the following: C:/Archivos de programa/FWTools2.4.7/bin/ogr2ogr R1G-GEODESIA.shp -where LAYER = 'R1G-GEODESIA' tapalpa_05_plani_point.dbf I want my uotput to look like this. Instead I'm getting this C:/Archivos de programa/FWTools2.4.7/bin/ogr2ogr T21-PUENTES.shp -where LAYER=+line tapalpa_05_plani_line.shp In miy code line is a string given by the user: for line in open(unico.txt, r).readlines(): p = subprocess.Popen(['C:/Archivos de programa/FWTools2.4.7/bin/ogr2ogr', line+'.shp', '-where', LAYER='line', b+'.shp']) Any suggestions? Without knowing specifics about what the subprocess.Popen function is expecting as parameters, I can only speculate, but it seems that the following *might* work (for extremely generous values of *might*): for line in open(unico.txt, r).readlines(): p = subprocess.Popen(['C:/Archivos de programa/FWTools2.4.7/bin/ogr2ogr', line+'.shp', '-where', \LAYER=' + line + '\, b+'.shp']) Details about where the changes are: \LAYER=' + line + '\ Begin corrections (corrections start with a *) Quote to begin the literal: An escaped quote (1) so that there's a quote inside the literal: \ Some of the text that's meant to be unchanging: LAYER= *Single Quote (2) to be included in the literal (which doesn't need to be escaped): ' Close Quote: Add the content of the variable line from the unico.txt file: + line + *Add another literal, composed of the single quote that closes (2) above, then the closing escaped quote to close (1) : '\ See if this works, and let us know how it turns out. Antonio Rodriguez End of corrections. Antonio Rodriguez ___ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor
Re: [Tutor] PYTHON QUOTES ISSUE
Susana Iraiis Delgado Rodriguez susana.delgad...@utzmg.edu.mx wrote How can I write a statement to execute the following: C:/Archivos de programa/FWTools2.4.7/bin/ogr2ogr R1G-GEODESIA.shp -where LAYER = 'R1G-GEODESIA' tapalpa_05_plani_point.dbf, I want my uotput to look like this. erm, like what? The command string above? So where is this output coming from? Or are you talking about the output from the command? Instead I'm getting this C:/Archivos de programa/FWTools2.4.7/bin/ogr2ogr T21-PUENTES.shp -where LAYER=+line tapalpa_05_plani_line.shp The difference is that you seem to be getting +line as a literal string instead of the variables value. Is that the problem? In miy code line is a string given by the user: for line in open(unico.txt, r).readlines(): You donlt need the readlines you can iterate over the open file. p = subprocess.Popen(['C:/Archivos de programa/FWTools2.4.7/bin/ogr2ogr', line+'.shp', '-where', LAYER='line', b+'.shp']) Notice that you have quotes around the line following LAYER= Any suggestions? remove the quotes? And shift the double quotes after the = sign. HTH, -- Alan Gauld Author of the Learn to Program web site http://www.alan-g.me.uk/ ___ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor