打开由 Windows 上 Python 中的 sys.argv 提供的路径指定的文件?

Open files, specified by a path provided via sys.argv in Python on Windows?

考虑下面的程序,其目的是打开一些文件,由 sys.argv[1] + "string" 引用。

import sys

def searchAndReplacePath(path):

    filesToSearch = [path + "\main\file1.txt",
                     path + "\main\folder\file2.txt"]

    for files in filesToSearch:
        with open(files, 'r') as inFile:
            filedata = inFile.readlines()

if __name__ == "__main__":
    # sys.argv[1] -- Specify which path should be used
    searchAndReplacePath(sys.argv[1])

在执行时(Python 3.6,Windows 7)我收到一个错误:

Traceback (most recent call last):
  File "searchAndReplacePath.py", line 35, in <module>
    searchAndReplacePath(sys.argv[1])
  File "searchAndReplacePath.py", line 19, in searchAndReplacePath
    with open(file, 'r') as inFile:
FileNotFoundError: [Errno 2] No such file or directory: 'C:\Users\user\main\file1.txt'

Python 将反斜杠添加到我的反斜杠中!如果我迭代列表和 print() 所述列表中的每个项目,我得到 "single backslashes",所以我真的不知道该怎么做。我已经阅读了很多关于 raw strings 以及如何使用:r"path\to\file" 的内容,但是由于我从 sys.argv[] 获得了我的意见,所以我现在真的不知道如何获得相同的结果。

如何打开由 Windows 上 Python 中的 sys.argv[] 提供的路径指定的文件?

尝试使用 python 的 os 模块: import os files_to_search = [os.path.join(path, 'main\file1.txt') ... ]

这里的问题出现在下面的交互会话中:

>>> "\f"
'\x0c'
>>> '\f'
'\f'
>>> r'\f'
'\\f'
>>> '\f'
'\x0c'
>>> r'\f'
'\f'
>>>

如您所见,当解释器打印字符串的 repr 时,它引用反斜杠以反映 Python 来源。 '\f' 是单个字符,而不是两个。打印文件名时,解释器使用其 repr().

另外,请注意这个区别:

>>> print('\"')
"
>>> '\"'
'"'

您会看到 repr() 在值周围添加了引号,显示它就像在 Python 程序中表示的那样。