python中的文件路径,可能的写作风格



我知道以下字符串定义表示(python内部(相同的(基础知识(:

s1 = "D:\users\xy\Desktop\PC_daten.txt"
s2 = r"D:usersxyDesktopPC_daten.txt"

因此,如果你在PythonWin中使它成为交互式的:

>>> s1 = "D:\users\xy\Desktop\PC_daten.txt"
>>> s1
'D:\users\xy\Desktop\PC_daten.txt'
>>> print s1
D:usersxyDesktopPC_daten.txt
>>> s2 = r"D:usersxyDesktopPC_daten.txt"
>>> s2
'D:\users\xy\Desktop\PC_daten.txt'
>>> print s2
D:usersxyDesktopPC_daten.txt

对我来说很清楚(理解(

但我感到困惑的是,在python内置函数中,打开所有这些(部分疯狂的(路径编码工作(在PythonWin中进行交互式测试(:

>>> a = open("D:usersxyDesktopPC_daten.txt")
>>> a
<open file 'D:\users\xy\Desktop\PC_daten.txt', mode 'r' at 0x00000000046989C0>
>>> b = open("D:\users\xy\Desktop\PC_daten.txt")
>>> b
<open file 'D:\users\xy\Desktop\PC_daten.txt', mode 'r' at 0x00000000048B2300>
>>> c = open(r"D:usersxyDesktopPC_daten.txt")
>>> c
<open file 'D:\users\xy\Desktop\PC_daten.txt', mode 'r' at 0x00000000048B20C0>
>>> d = open(r"D:\users\xy\Desktop\PC_daten.txt")
>>> d
<open file 'D:\\users\\xy\\Desktop\\PC_daten.txt', mode 'r' at 0x00000000048B2390>

我的问题:

  • 这种行为记录在哪里?
  • 有背景信息吗?

测试是在Windows 7操作系统和PythonWin 2.7.13上进行的

有关详细信息,请查看文档中的 2.4.1 节

让我们来看看不同的字符串以及它们工作的原因:

>>> a = open("D:usersxyDesktopPC_daten.txt")
>>> a
<open file 'D:\users\xy\Desktop\PC_daten.txt', mode 'r' at 0x00000000046989C0>

是字符串中的转义字符,用于换行符 (n( 等特殊字符。在这种情况下,您很幸运,没有任何组合uxP表示这样的特殊字符,因此它有效,而不是open("foonewfile.txt")

>>> b = open("D:\users\xy\Desktop\PC_daten.txt")
>>> b
<open file 'D:\users\xy\Desktop\PC_daten.txt', mode 'r' at 0x00000000048B2300>

保存方法,\结构转义,因此您也可以执行open("foo\newline")

>>> c = open(r"D:usersxyDesktopPC_daten.txt")
>>> c
<open file 'D:\users\xy\Desktop\PC_daten.txt', mode 'r' at 0x00000000048B20C0>

还要保存,因为前缀r表示原始字符串,因此是字面上的,而不是作为转义序列

>>> d = open(r"D:\users\xy\Desktop\PC_daten.txt")
>>> d
<open file 'D:\\users\\xy\\Desktop\\PC_daten.txt', mode 'r' at 0x00000000048B2390>

这里你有一个原始字符串(前面有r(,但仍然使用双,因此你在路径中有\。这是有效的,因为窗口可以理解具有双的路径,您也可以在cmd中确认

此字符串行为记录在(Python v3.7 文档(2.4.1. String and Bytes literals下,open()的行为记录在2. Built-in Functions下。
具体来说,对于open()中的文件/路径,如条目class os.PathLike中的16.1.2. Process Parameters中所述。诚然,要真正理解这个参数,这需要大量的阅读。

求和:r"字符串"是一个原始字符串。使用原始斜杠时,无需像\那样转义斜杠即可生成单个斜杠

在第二个块中,为了清楚起见,您正在查看变量本身并通过它们的字符串表示(使用 print 时(查看它们(我认为您提到您理解得很好,但我只是想向您重复一遍以确保(。

展望未来,python版本在处理文件和文件夹时都将使用PathLike对象。我猜你还在使用 Python 2.x,因为你在运行print s1时没有收到错误 - 应该在 Python 3.x 中print(s1)。我建议尽快迁移到 Python 3,它确实好多了。

我希望这能成功回答你的问题?

最新更新