了解python中的文件位置 - 意外错误

时间:2014-03-31 04:50:39

标签: python python-3.x

我正在学习Windows 7中的python 3.3。我有两个文本文件 - lines.txt和raven.txt在一个文件夹中。两者都包含第一个示例的相同文本。

当我尝试使用下面的代码访问乌鸦时,我收到错误 -

OSError: [Errno 22] Invalid argument: 'C:\\Python\raven.txt'

我知道上面的错误可以通过使用像这样的转义字符来解决 -

C:\\Python\\raven.txt
C:\Python\\raven.txt

为什么两种方法都有效?奇怪的是,当我在同一个文件夹中访问lines.txt时,我没有收到任何错误!为什么?

import re

def main():
    print('')
    fh = open('C:\Python\lines.txt')

    for line in fh:
        if re.search('(Len|Neverm)ore', line):
            print(line, end = '')

if __name__ == '__main__':main()

此外,当我使用下面的行时,我得到一个完全不同的错误 - TypeError: embedded NUL character。为什么?

fh = open('C:\Python\Exercise Files\09 Regexes\raven.txt')

我可以在文件路径中的每个\之前使用\来解决此问题。

3 个答案:

答案 0 :(得分:2)

\ r \ n是转义字符,但\ l不是。因此,线被解释为线,而raven被解释为aven,因为\ r被转义。

In [1]: len('\l')
Out[1]: 2
In [2]: len('\r')
Out[2]: 1

您应始终使用\\转义反斜杠。如果你的字符串没有引号,你也可以使用原始字符串:

In [9]: len(r'\r')
Out[9]: 2
In [10]: r'\r'
Out[10]: '\\r'

请参阅:https://docs.python.org/3/reference/lexical_analysis.html

答案 1 :(得分:1)

也许您可以使用raw string

就像这个open(r'C:\Python\Exercise Files\09 Regexes\raven.txt')

  

当存在r' or R'前缀时,仍然使用反斜杠   引用以下字符,但所有反斜杠都留在   串。例如,字符串文字r“\ n”由两个组成   字符:反斜杠和小写的“n”。字符串引号可以是   用反斜杠转义,但反斜杠仍在字符串中;对于   例如,r“\”“是一个由两个字符组成的有效字符串文字:   反斜杠和双引号; r“\”不是值字符串文字   (即使原始字符串也不能以奇数个反斜杠结尾)。   具体来说,原始字符串不能以单个反斜杠结尾(因为   反斜杠会逃避以下引号字符)。另请注意   单个反斜杠后跟换行符被解释为这两个   字符作为字符串的一部分,而不是行的延续。

答案 2 :(得分:1)

你实际上可以使用正斜杠而不是向后斜杠,这样你根本不必逃避它们,这可以省去很多麻烦。像这样:'C:/Python/raven.txt',我可以保证它适用于Windows。