open()函数在包含特殊字符的文件路径中无法正常运行

时间:2018-10-09 13:14:49

标签: python file filepath

我正在编写以下简单代码:

file = input('File to read: ')
fhand = open(file, 'r')

我要打开的文件称为“ test.txt”,它位于子文件夹中;因此,我在请求的输入中输入的内容是:“ DB \ test.txt”。

好:它不起作用,返回此错误消息:

OSError: [Errno 22]Invalid argument: 'DB\test.txt'.

我在同一目录中有另一个文件,称为“ my_file.txt”,尝试打开该文件时不会出错。最后,我还有一个名为“ new_file.txt”的文件,这个文件也让我遇到相同的错误。

对我来说显而易见的是,open()函数读取“ \ t”和“ \ n”,就好像它们是特殊字符一样。在网络上搜索时,我发现没有什么能真正避免在用户输入字符串中避免使用特殊字符... 有人可以帮忙吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

使用您的确切代码使用Python 3不会有任何问题(在传递Windows {em> literal 字符串(需要使用r前缀时,经常会遇到此问题)。

使用python 2,首先您必须用引号将文件名包裹起来,然后将解释所有特殊字符(\t\n ...)。除非您使用我之前提到的原始前缀输入r"DB\test.txt",否则它开始变得很麻烦:)

因此,我建议您使用raw_input(并且不要在文本中加上引号)。或python版本不可知版本,仅针对python 2覆盖不安全的input

try:
    input = raw_input
except NameError:
    pass

然后您的代码可以正常工作,并且您摆脱了代码中可能出现的代码注入的麻烦(请参阅python 2特定主题:Is it ever useful to use Python's input over raw_input?)。