在 python 中使用 gpkg 的参数化复杂字符串
Parametrized complex string working with gpkg in python
我需要像这样构造一个文本链:
out = 'ogr:dbname=\'C:\output\2020.gpkg\' table=\"2020\" (geom) sql='
这是我的代码:
import glob, time, sys, threading, os
from datetime import date, timedelta, datetime
import time, threading
#Parameters
layer = 'C:\layer.gpkg'
n ='2020'
outdir = 'C:\output'
#Process
l = os.path.realpath(layer)
pn = os.path.realpath(outdir + '/' + n + '.gpkg')
p = f"'{pn}'"
f = f"'{n}'"
o = f'ogr:dbname={p} table={f} (geom) sql='
#Test
out = 'ogr:dbname=\'C:\output\2020.gpkg\' table=\"2020\" (geom) sql='
o == out
目标是让 o == 出来。
我需要在 #Process 部分中更改什么才能使其成为 True?
此外,我需要在 linux 或 windows 中 运行。
我的最终目标是创建一个提供 3 个字符串的函数 returns 如上所示的复杂字符串行。
假设您使用的是 python 3.6 或更高版本,您应该使用格式字符串(也称为 f 字符串)从变量构造字符串。字符串以字母 "f" 开头,然后将您想要的任何变量放在大括号 {} 中。此外,如果您使用单引号作为外引号,那么您不必转义双引号,反之亦然。
代码:
db_name = "'home/user/output/prueba.gpkg'"
table_name = '"prueba"'
outputlayer = f'ogr:dbname={db_name} table={table_name} (geom) sql='
outputlayer
输出:
'ogr:dbname=\'home/user/output/prueba.gpkg\' table="prueba" (geom) sql='
另一种选择是使用三引号字符串:
dbname = """/home/user/output/prueba.gpkg"""
outputlayer = """ogr:dbname='"""+dbname+"""' table="prueba" (geom) sql="""
给出:
'ogr:dbname=\'/home/user/output/prueba.gpkg\' table="prueba" (geom) sql='
我认为这不起作用的问题之一是您在此处的路径 pn = os.path.realpath(outdir + '/' + n + '.gpkg')
。这是试图将 UNIX 路径 /
与 windows 路径 \
结合起来。就 linux 和 windows 之间的可移植性而言,一个更强大的解决方案是使用 os 模块中的 path.join
函数。
此外,python f 字符串只会向您用来打开字符串的引号字符添加转义符('
或 "
)。如果两个字符串周围的转义引号都是必要的,您最好将其硬编码为 f 字符串,而不是设置 2 个具有不同引号类型的新变量。
import glob, time, sys, threading, os
from datetime import date, timedelta, datetime
import time, threading
#Parameters
layer = 'C:\layer.gpkg'
n ='2020'
outdir = 'C:\output'
#Process
l = os.path.realpath(layer)
pn = os.path.realpath(os.path.join(outdir, f"{n}.gpkg"))
o = f'ogr:dbname=\'{pn}\' table=\"{n}\" (geom) sql='
#Test
out = 'ogr:dbname=\'C:\output\2020.gpkg\' table=\"2020\" (geom) sql='
o == out
这个版本(不同的路径)已经过测试,可以在我的 linux 机器上运行。
我需要像这样构造一个文本链:
out = 'ogr:dbname=\'C:\output\2020.gpkg\' table=\"2020\" (geom) sql='
这是我的代码:
import glob, time, sys, threading, os
from datetime import date, timedelta, datetime
import time, threading
#Parameters
layer = 'C:\layer.gpkg'
n ='2020'
outdir = 'C:\output'
#Process
l = os.path.realpath(layer)
pn = os.path.realpath(outdir + '/' + n + '.gpkg')
p = f"'{pn}'"
f = f"'{n}'"
o = f'ogr:dbname={p} table={f} (geom) sql='
#Test
out = 'ogr:dbname=\'C:\output\2020.gpkg\' table=\"2020\" (geom) sql='
o == out
目标是让 o == 出来。
我需要在 #Process 部分中更改什么才能使其成为 True?
此外,我需要在 linux 或 windows 中 运行。
我的最终目标是创建一个提供 3 个字符串的函数 returns 如上所示的复杂字符串行。
假设您使用的是 python 3.6 或更高版本,您应该使用格式字符串(也称为 f 字符串)从变量构造字符串。字符串以字母 "f" 开头,然后将您想要的任何变量放在大括号 {} 中。此外,如果您使用单引号作为外引号,那么您不必转义双引号,反之亦然。
代码:
db_name = "'home/user/output/prueba.gpkg'"
table_name = '"prueba"'
outputlayer = f'ogr:dbname={db_name} table={table_name} (geom) sql='
outputlayer
输出:
'ogr:dbname=\'home/user/output/prueba.gpkg\' table="prueba" (geom) sql='
另一种选择是使用三引号字符串:
dbname = """/home/user/output/prueba.gpkg"""
outputlayer = """ogr:dbname='"""+dbname+"""' table="prueba" (geom) sql="""
给出:
'ogr:dbname=\'/home/user/output/prueba.gpkg\' table="prueba" (geom) sql='
我认为这不起作用的问题之一是您在此处的路径 pn = os.path.realpath(outdir + '/' + n + '.gpkg')
。这是试图将 UNIX 路径 /
与 windows 路径 \
结合起来。就 linux 和 windows 之间的可移植性而言,一个更强大的解决方案是使用 os 模块中的 path.join
函数。
此外,python f 字符串只会向您用来打开字符串的引号字符添加转义符('
或 "
)。如果两个字符串周围的转义引号都是必要的,您最好将其硬编码为 f 字符串,而不是设置 2 个具有不同引号类型的新变量。
import glob, time, sys, threading, os
from datetime import date, timedelta, datetime
import time, threading
#Parameters
layer = 'C:\layer.gpkg'
n ='2020'
outdir = 'C:\output'
#Process
l = os.path.realpath(layer)
pn = os.path.realpath(os.path.join(outdir, f"{n}.gpkg"))
o = f'ogr:dbname=\'{pn}\' table=\"{n}\" (geom) sql='
#Test
out = 'ogr:dbname=\'C:\output\2020.gpkg\' table=\"2020\" (geom) sql='
o == out
这个版本(不同的路径)已经过测试,可以在我的 linux 机器上运行。