微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Python向用户输入文件路径添加反斜杠和引号,不会打开

如何解决Python向用户输入文件路径添加反斜杠和引号,不会打开

使用 Python 3.9,我想“输入”一个文件路径(通过输入函数)。然后我想打开那个文件路径。我受到以下错误的阻碍:

OSError: [Errno 22] Invalid argument: "'C:\\\\Users\\\\Hart\\\\Documents\\\\File.txt'"

我想知道为什么。

这是我所知道的:我有一个文件路径。根据os.path.exists,文件路径存在。

>>> os.path.exists("C:\\Users\\Hart\\Documents\\File.txt")
True

我可以打开文件

>>> open("C:\\Users\\Hart\\Documents\\File.txt")
<_io.TextIOWrapper name='C:\\Users\\Hart\\Documents\\File.txt' mode='r' encoding='cp1252'>

我可以随意调用文件,它仍然存在,我仍然可以打开它。

>>> anything = "C:\\Users\\Hart\\Documents\\File.txt"
>>> os.path.exists(anything)
True
>>> open(anything)
<_io.TextIOWrapper name='C:\\Users\\Hart\\Documents\\File.txt' mode='r' encoding='cp1252'>

但我想通过输入函数间接打开文件

>>> file = input('Enter a file path\n')
Enter a file path
'C:\\Users\\Hart\\Documents\\File.txt'

这会创建一个名为 file 的变量,它类似于我的文件路径。

>>> print(file)
'C:\\Users\\Hart\\Documents\\File.txt'

但是当我尝试打开它时...

OSError: [Errno 22] Invalid argument: "'C:\\\\Users\\\\Hart\\\\Documents\\\\File.txt'"

这个变量所代表的文件也不存在。

>>> os.path.exists(file)
False

怎么回事?

解决方法

String and Bytes Literals 中所述,python 字符串文字识别以反斜杠 (\) 开头的转义序列,以对换行符 (\n)、十六进制值 (\x03) 等内容进行编码。请注意,这些规则适用于字符串literals,即python源代码中的字符串,在使用前被python编译。

从其他来源读取的字符串不是文字,也不遵循这些规则。所以,python源代码中的一个字符串

file = "C:\\Users\\Hart\\Documents\\File.txt"

真的

 C:\Users\Hart\Documents\File.txt

记忆中。很难发现这一点,因为当您显示字符串时,python 可能会向您显示字符串的转义文字表示。您可以通过一个快速的 shell 示例看到不同之处

>>> test = "C:\\Users\\Hart\\Documents\\File.txt"
>>> test
'C:\\Users\\Hart\\Documents\\File.txt'
>>> print(test)
C:\Users\Hart\Documents\File.txt

当你 input() 文本时,那是真正的文本,不是字符串文字。 Windows 不需要引号或额外的反斜杠。所以,

>>> file = input('Enter a file path\n')
Enter a file path
C:\Users\Hart\Documents\File.txt
>>> print(file)
C:\Users\Hart\Documents\File.txt

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?