我有一个使用argparse的脚本来收集用户定义目录的列表。在命令行上,它们可以指定也可以不指定结尾的“ /”符号。我想先做些事,以便所有变量都带有尾随的“ /”,这样我就可以可靠地做到:
# What I want:
with open(args.a + filename, "w") as fileout:
#do stuff
print('whatever', file=fileout)
而不是像这样的名称中必须包含一个额外的“ /”:
# What I have:
with open(args.a + "/" + filename, "w") as fileout:
#do stuff
print('whatever', file=fileout)
我还知道,dir/ect/ory
和dir//ect//ory
几乎相等,只是保留了一些不适用的附带情况,但将+ "/" +
放在各处似乎是错误的/浪费的。
当试图使一个小的函数在所有相关变量上运行时,我只在显式调用变量上的函数而不是包含元素的列表上才看到所需的结果。
def trailingSlash(x):
if x.endswith("/"):
return x
else:
return x + "/"
a = 'ok/'
b = 'notok'
c = 'alsonotok'
for _ in [a, b, c]:
_ = trailingSlash(_)
print(a,b,c) #gives ok/ notok alsonotok
c = trailingSlash(c)
print(c) #gives alsonotok/
我理解为什么在迭代时更改列表通常很不好,并且理解在for循环中迭代器实际上并未指向a,b或c。我也知道如果我想要一个新列表中的值,我可以做类似[trailingSlash(x) for x [a,b,c]]
的事情,但是我需要保持a,b,c句柄。我知道我也可以通过在每个变量上专门调用x = trailingSlash(x)
来解决此问题,但是似乎应该有更好的方法。我缺少任何解决方案吗?
答案 0 :(得分:1)
您可以使用 SELECT t1.data1, t1.data3, t2.data2 as t2_data, t3.data1 as t3_data
FROM Table1 t1 LEFT JOIN Table2 t2 ON t1.data2 = t2.id
LEFT JOIN Table3 t3 ON t2.data1 = t3.id
忽略整个问题。不管结尾处是否有斜杠,它的行为都一样,并且作为奖金是独立于平台的(例如,在Windows上运行时,它使用os.path.join()
而不是\\
):< / p>
/
您想做的事
import os
...
os.path.join("dir/", "ect", "ory")
# "dir/ect/ory" on Unix, "dir\\ect\\ory" on Windows