文件路径包含特殊字符 \N

0 投票
2 回答
1073 浏览
提问于 2025-04-18 14:49

我正在做一个文件复制的工作,把文件从一个地方复制到另一个地方。这很简单,可以用 shutil.copy 来完成。一切都很顺利,直到我遇到了一个特殊的“源”文件。

这个文件的路径是这样的:

c:\install\NewCustomer\fire.exe

现在每次我执行这个代码时,它都会报错:

    'unicodeescape' codec can't decode bytes in position 975: malformed \N character escape
  at IronPython.Runtime.LiteralParser.ParseString (System.Char[] text, Int32 start, Int32 length, Boolean isRaw, Boolean isUni, Boolean normalizeLineEndings) [0x00000] in <filename unknown>:0
  at IronPython.Compiler.Tokenizer.MakeStringToken (Char quote, Boolean isRaw, Boolean isUnicode, Boolean isBytes, Boolean isTriple, Int32 start, Int32 length) [0x00000] in <filename unknown>:0
  at IronPython.Compiler.Tokenizer.ContinueString (Char quote, Boolean isRaw, Boolean isUnicode, Boolean isBytes, Boolean isTriple, Int32 startAdd) [0x00000] in <filename unknown>:0
  at IronPython.Compiler.Tokenizer.ReadString (Char quote, Boolean isRaw, Boolean isUni, Boolean isBytes) [0x00000] in <filename unknown>:0
  at IronPython.Compiler.Tokenizer.Next () [0x00000] in <filename unknown>:0
  at IronPython.Compiler.Tokenizer.GetNextToken () [0x00000] in <filename unknown>:0
  at IronPython.Compiler.Parser.FetchLookahead () [0x00000] in <filename unknown>:0
  at IronPython.Compiler.Parser.NextToken () [0x00000] in <filename unknown>:0
  at IronPython.Compiler.Parser.MaybeEat (TokenKind kind) [0x00000] in <filename unknown>:0
  at IronPython.Compiler.Parser.FinishAssignments (IronPython.Compiler.Ast.Expression right) [0x00000] in <filename unknown>:0
  at IronPython.Compiler.Parser.ParseExprStmt () [0x00000] in <filename unknown>:0
  at IronPython.Compiler.Parser.ParseSmallStmt () [0x00000] in <filename unknown>:0
  at IronPython.Compiler.Parser.ParseSimpleStmt () [0x00000] in <filename unknown>:0
  at IronPython.Compiler.Parser.ParseStmt () [0x00000] in <filename unknown>:0
  at IronPython.Compiler.Parser.ParseSuite () [0x00000] in <filename unknown>:0
  at IronPython.Compiler.Parser.ParseTryStatement () [0x00000] in <filename unknown>:0
  at IronPython.Compiler.Parser.ParseStmt () [0x00000] in <filename unknown>:0
  at IronPython.Compiler.Parser.ParseSuite () [0x00000] in <filename unknown>:0
  at IronPython.Compiler.Parser.ParseClassOrFuncBody () [0x00000] in <filename unknown>:0
  at IronPython.Compiler.Parser.ParseFuncDef () [0x00000] in <filename unknown>:0
  at IronPython.Compiler.Parser.ParseStmt () [0x00000] in <filename unknown>:0
  at IronPython.Compiler.Parser.ParseSuite () [0x00000] in <filename unknown>:0
  at IronPython.Compiler.Parser.ParseClassOrFuncBody () [0x00000] in <filename unknown>:0
  at IronPython.Compiler.Parser.ParseClassDef () [0x00000] in <filename unknown>:0
  at IronPython.Compiler.Parser.ParseStmt () [0x00000] in <filename unknown>:0
  at IronPython.Compiler.Parser.ParseFileWorker (Boolean makeModule, Boolean returnValue) [0x00000] in <filename unknown>:0
  at IronPython.Compiler.Parser.ParseFile (Boolean makeModule, Boolean returnValue) [0x00000] in <filename unknown>:0
  at IronPython.Runtime.PythonContext.ParseAndBindAst (Microsoft.Scripting.Runtime.CompilerContext context) [0x00000] in <filename unknown>:0
  at IronPython.Runtime.PythonContext.CompilePythonCode (Microsoft.Scripting.SourceUnit sourceUnit, Microsoft.Scripting.CompilerOptions options, Microsoft.Scripting.ErrorSink errorSink) [0x00000]

错误的原因是因为有个特殊字符 "\N"。我知道如果我写下面这段代码,它就能正常工作:

r"c:\install\NewCustomer\fire.exe"

但是问题是这个源路径是动态生成的,所以在运行时我并不知道是否需要处理这个特殊字符。有没有什么办法可以解决这个问题呢?

2 个回答

-2
yourvariable.strip()

如果你在调用变量的时候运行那个代码,它应该会去掉换行符。

3

你为什么要为路径生成Python代码呢?不如把路径生成到一个文本文件里,然后再读取这个文件。

\n并不是唯一一个可能会给你带来麻烦的特殊字符 - 你可能总是需要使用原始字符串。

撰写回答