考虑下面的程序,其目的是打开由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[]
提供的路径指定的文件?
答案 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程序中表示。