我正在将文件从一个位置复制到另一个位置。这很容易,使用shutil.copy
。一切都很好,直到一个特殊的“来源”来了。文件路径有特殊字符 N
文件的路径是这样的:
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"
但问题是动态生成的源路径,所以直到运行时,我不知道我是否有处理这种特殊字符。有什么办法来处理这种情况?
在这里,我认为这将是一个“我在Unix上读取一堆文件/ stdin /等文件名,其中一个在实际文件名中有一个嵌入式的'\ n' “的问题,但它只是”我决定使用Python源码作为我的序列化格式,出于某种原因,而且我不知道如何引用或转义东西“,这是不太有趣的。 – abarnert