【问题标题】:Python escape character when parameter is a path - Windows参数为路径时的 Python 转义字符 - Windows
【发布时间】: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


【解决方案1】:

你从哪里得到路径?来自用户的输入?

这样的话,有办法:

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'

或者是你追求的其他东西?

【讨论】:

  • 该方法适用于 Windows,因为它使用专有软件的工具箱,仅在特定操作系统上运行。另外,由于它可能通过其他方法调用,我不想使用 input() 或 raw_input() 方法
  • @SergiosKolios 当你说方法时,你不是指 python 函数,对吗?因为您在 python 函数之间传递的任何字符串都不会以任何方式“评估”。如果它从一开始就包含正确的数据,它会做你想做的事。如果是程序启动时的输入参数,则需要正确转义,否则输入数据完全错误,尝试在python中修复它不是最好的解决方案。
  • 是的,我的意思是一个 python 函数。通常,我试图找到一种使用此函数的方法,或者使用参数调用它,或者通过另一个函数/方法调用它。 斜体 例如:def printstrings(file,outputworkspace): print file print outputworkspace
猜你喜欢
  • 2021-07-23
  • 1970-01-01
  • 2015-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-06
  • 1970-01-01
相关资源
最近更新 更多