2014-07-25 93 views
0

我正在将文件从一个位置复制到另一个位置。这很容易,使用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" 

但问题是动态生成的源路径,所以直到运行时,我不知道我是否有处理这种特殊字符。有什么办法来处理这种情况?

+1

在这里,我认为这将是一个“我在Unix上读取一堆文件/ stdin /等文件名,其中一个在实际文件名中有一个嵌入式的'\ n' “的问题,但它只是”我决定使用Python源码作为我的序列化格式,出于某种原因,而且我不知道如何引用或转义东西“,这是不太有趣的。 – abarnert

回答

3

为什么你要为路径生成Python代码?生成路径到一个文本文件,然后读取它们。

\n不是唯一可能导致问题的特殊字符 - 您可能必须始终使用原始字符串。

-2
yourvariable.strip() 

如果你在你的变量上运行时调用它,它应该删除新的行字符。