【发布时间】:2012-03-16 11:49:15
【问题描述】:
我对 python 比较陌生,我正在为我正在创建的工具箱编写一个方法。
函数是这样的:
def explodeByUniqueAttributeValue(inputfile,fieldname,outputworkspace):
...
当输入文件的路径或工作空间有特定的转义字符,如 \t 时,该功能不起作用。 更具体地说,输入文件可能是这样的:
"C:\tmp\Data\Data.dbf"
输出工作区可能是这样的:
"D:\Data\2010_12\Output"
在这些情况下,python 会相应地读取:
>>> inputfile
C:\tmp\\Data\\Data.dbf
>>> print inputfile
C: mp\Data\Data.dbf
和
>>> 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()
对于输入文件的问题,我找到了解决方法,方法如下:
Dummy = inputfile.replace('\t','\\t'); inputfile = Dummy; del Dummy
我可以对所有转义字符重复此操作,或者创建另一个完全执行此操作的方法,但对于
"\2010_12"
被python“读取”为的转义
"\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')
非常感谢您的帮助
提前谢谢
【问题讨论】:
-
他们不需要;你做错了什么。
-
“raw”与“cooked”的概念仅适用于字符串文字,不适用于它们表示的字符串对象或一般的字符串。
-
@IgnacioVazquez-Abrams 有没有办法缩小我做错了什么?可能与编码有关吗?最近我开始使用 VS 2010 和 Python 工具,这可能将编码从 'ascii' 更改为 'utf8'。
-
“输入文件的问题我找到了通过以下方法解决它的方法:”实际上并不存在于用户输入、函数参数或任何除了 脚本的源代码。您似乎对在
>>>提示符处看到的内容感到困惑。如果您编写一个三行脚本来根据用户输入打开文件,您会发现没有实际问题。 -
@S.Lott 目前,我正在通过 Visual Studio 2010 和 Python 工具编写和运行所有内容,因此,只要将这两个路径之一输入到另一个函数,我确实会遇到这个问题。事实上,我对我在 prompt 中看到的东西感到困惑,因为我认为 print 的输出是每个参数本身。请原谅我的困惑,但我来自 matlab 背景,变量和输入参数的东西很简单。
标签: python methods input parameters path