如何在文件路径中使用变量

时间:2018-10-14 08:48:55

标签: python

我想使用Hindsight分析系统(Windows)上每个用户的默认Chrome数据位置。 default_directory的字符串串联有效。但是循环中的两个变量(default_directory和user)不起作用。我正在编写一个使用Carbon Black API的脚本。

for user in users_list:
        try:
            default_directory = os.path.normpath('C:\\Users\\' + user + '\\AppData\\Local\\Google\\Chrome\\User Data\\Default') # String concatenation
            session.create_process(r'C:\\Windows\\cbapi\\hindsight.exe -i "{default_directory}" -o "hindsight_{user}"', wait_timeout=600) 
        except Exception: pass

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

如果使用的是原始字符串(如引号前的r),则不应使用双反斜杠;如果要将变量嵌入字符串中,则不应使用f字符串。

更改:

session.create_process(r'C:\\Windows\\cbapi\\hindsight.exe -i "{default_directory}" -o "hindsight_{user}"', wait_timeout=600)

to(如果您使用的是Python 3 +):

session.create_process(fr'C:\Windows\cbapi\hindsight.exe -i "{default_directory}" -o "hindsight_{user}"', wait_timeout=600)

或者,如果您使用的是不支持f-string的Python 2.7,请改用字符串格式化程序:

session.create_process(r'C:\Windows\cbapi\hindsight.exe -i "{}" -o "hindsight_{}"'.format(default_directory, user), wait_timeout=600)

答案 1 :(得分:0)

我认为您忘记了字符串前面的格式说明符'f'。

a = 'some_variable'
out_string = f'this is {a}' # Notice the 'f'

以下内容将起作用:

for user in users_list:
        try:
            default_directory = os.path.normpath('C:\\Users\\' + user + '\\AppData\\Local\\Google\\Chrome\\User Data\\Default') # String concatenation
            session.create_process(fr'C:\\Windows\\cbapi\\hindsight.exe -i "{default_directory}" -o "hindsight_{user}"', wait_timeout=600) 
        except Exception: pass