2013-02-28 59 views
0


长话短说。 我有这样的功能:Howto不能跳过python中的字符串函数参数

def save_screenshot(self, file_destination, picture_format = None) 
    file_path_name, file_extension = os.path.splitext(file_destination) 
    file_path, file_name = os.path.split(file_path_name) 
    (...) 

现在,我把这样的功能:

save_screenshot("C:\Temp\picture.jpg", "JPG") 

我知道HOWTO无法逃脱在python的字符串(用“os.path.join”的帮助),但我不知道如何做到这一点,如果字符串是一个函数参数。如果我编写“C:\\ Temp \\ picture.jpg”或“C:/Temp/picture.jpg”,该功能可以正常工作(在Windows上)。

如果您有一些建议,会很棒。
感谢

+2

是否想从控制台读取路径?我似乎不太明白这里的目标是什么。 – dmg 2013-02-28 11:32:34

+4

您可以使用原始字符串,例如'R “C:\ TEMP \ picture.jpg”'。 – nymk 2013-02-28 11:34:30

+0

@DJV:不,不是来自控制台。脚本中没有任何请求,所有内容都包含在脚本中。 – eljobso 2013-02-28 11:40:30

回答

1

如前所述,你可以使用:

原始字符串R “串 ”

save_screenshot(r"C:\Temp\picture.jpg", "JPG") 

它也应该可以用 “”“ 串 ”“”

save_screenshot("""C:\Temp\picture.jpg""", "JPG") 

也许我也可以参考堆栈上的这个答案: what-exactly-do-u-and-rstring-flags..

这基本上解释了如何使用原始字符串文字来忽略从字符串中的反斜杠(主要是为regexp)派生的转义序列。

0

我的问题是你的问题不是使用os.path而是转义/ unescape字符串。
这个功能会更好吗?

def save_screenshot(self, file_destination, picture_format = None): 
    file_name = os.path.basename(file_destination) 
    path = os.path.dirname(file_destination) 
    base, ext = os.path.splitext(file_name) 
    e = ext if picture_format is None else '.%s' % picture_format.lower() 
    to_path = os.path.join(path, base + e) 
    print(to_path)