2014-07-25 92 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() 

如果你在你的變量上運行時調用它,它應該刪除新的行字符。