2012-02-26 50 views
3

我對python比較新,我正在爲我創建的工具箱編寫一個方法。當參數是一個路徑時,Python轉義字符 - Windows

功能是這樣的:

def explodeByUniqueAttributeValue(inputfile,fieldname,outputworkspace): 
... 

當輸入文件或工作區的路徑具有特定的轉義字符如\ t時的功能不起作用。 更具體地說,輸入文件可能是這樣的:

"C:\tmp\Data\Data.dbf"  

和outputworkspace可能是這樣的:

"D:\Data\2010_12\Output" 

在這種情況下,什麼樣的Python讀取相應的是:

>>> inputfile  
C:\tmp\\Data\\Data.dbf 

>>> print inputfile  
C: mp\Data\Data.dbf 

and

>>> outputworkspace 
'D:\\Data\x810_12\\Output' 
>>> print outputworkspace 
D:\Dataチ0_12\Output 

我的問題是:
有什麼辦法可以解析一個函數的輸入參數爲原始字符串,這與當文件和輸出工作空間的賦值通過腳本中的變量完成時可以完成的方式相同

inputfile = r"C:\tmp\Data\Data.dbf" 
outputworkspace = r"D:\Data\2010_12\Output" 

或任何功能的應用,將它們返回到一個通用的格式參數? 我已經通過了以下嘗試到目前爲止os.path.normpath()或string.encode()

用於與inputfile中的問題我已經找到了辦法來解決它:

Dummy = inputfile.replace('\t','\\t'); inputfile = Dummy; del Dummy 

哪我可以重複用於所有的轉義字符或創建另一個正是這樣做的方法,但同樣不能爲

"\2010_12"  

逃生這是

「讀」的蟒蛇來完成0
"\x810_12" 

因爲它不會是「正確」的方式來進行編程

我已經閱讀解決方案,如使用「/」或「\\」,但我想知道是否有任何的方式來傳遞一個方法的輸入參數就像生自己一樣。

添加一個例子:

# -*- coding: ascii -*- 
import os 

def printpaths(file,outputworkspace): 
    print file 
    print outputworkspace 

printpaths('C:\tmp\Data\Data.dbf','D:\Data\2010_12\Data') 

幫助將提前

+2

他們不需要;你做錯了什麼。 – 2012-02-26 22:12:28

+3

「raw」與「cooked」的概念僅適用於字符串文字,而不適用於它們表示的字符串對象或字符串。 – 2012-02-26 22:15:55

+0

@ IgnacioVazquez-Abrams 有什麼辦法可以縮小我做錯了什麼嗎? 它可能與編碼有關嗎?最近我開始使用VS 2010和Python for Python,它可能會將編碼從'ascii'改爲'utf8'。 – 2012-02-26 22:40:30

回答

0

你在哪裏得到的路徑將不勝感激
感謝名單?來自用戶的輸入?

在這種情況下,也有辦法:

Python 2.7.1 (r271:86832, May 6 2011, 10:39:37) 
[GCC 3.3.3 (SuSE Linux)] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> raw_input("filename: ") 
filename: C:\tmp 
'C:\\tmp' 
>>> raw_input("output: ") 
output: D:\Data\2010_12\Output 
'D:\\Data\\2010_12\\Output' 

抑或是別的東西,你是後?

+0

該方法旨在用於Windows,因爲它使用專用軟件的工具箱,只能在特定的操作系統上運行。 此外,因爲它可能會通過另一種方法調用,所以我不想使用input()或raw_input()方法 – 2012-02-26 22:35:45

+0

@SergiosKolios當您說方法時,您不是指Python函數,對嗎?因爲你在python函數之間傳遞的任何字符串都不會以任何方式被「評估」。如果它從一開始就包含正確的數據,它就會做你想要的。 如果它是程序啓動時的輸入參數,則需要正確地將其轉義,否則輸入數據只是錯誤的,試圖在python中修復它並不是最好的解決方案。 – 2012-02-26 22:41:13

+0

是的確的我的意思是一個python函數。 通常我想找到一種方法來使用這個函數,或者用參數或者通過其他函數/方法來調用它。 _italic_例如: def printsings(文件,輸出工作區): 打印文件 print outputworkspace – 2012-02-26 22:57:26

相關問題