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

时间:2017-06-26 13:21:01

标签: python windows filepath sys

考虑下面的程序,其目的是打开由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()列表中的每个项目,我会得到#34;单个反斜杠&#34;,所以我真的不知道该怎么做。我已经阅读了很多关于raw strings以及如何使用r"path\to\file"的内容,但是由于我从sys.argv []中获取了我的输入,所以我现在还不知道如何实现相同的结果。< / p>

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

此处的问题可在以下交互式会话中看到:

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

正如您所看到的,当解释器打印字符串的repr时,它会引用反斜杠以反映Python源代码。 '\f'是一个字符,而不是两个字符。打印文件名时,解释程序正在使用其repr()

另外,请注意这一区别:

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

您将看到repr()在值周围添加引号,显示它将在Python程序中表示。