【问题标题】:Can I pass "\t" to python from the command line? [duplicate]我可以从命令行将“\t”传递给 python 吗? [复制]
【发布时间】:2013-01-10 13:39:29
【问题描述】:

可能重复:
Passing meta-characters to Python as arguments from command line

我想将一个参数从命令行传递给一个 python 脚本来指定我的输入文件是用什么分隔的。 (例如",""\t")。为了灵活起见,我想直接在命令行中指定它,而不是在脚本中将此参数的选项中的代码。

例如

pythonscript.py --in_delimiter "\t" --in_file input.txt

我似乎遇到了在 python 接收到反斜杠之前解释它的问题。我试图通过添加额外的反斜杠来逃避这一点,但无法让它发挥作用。

我的问题: 是否可以从命令行传递类似 "\t" 的内容,或者我是否必须使用我在脚本中解释的代码(例如 c = ","t= "\t"等)。

感谢您的帮助。

【问题讨论】:

  • 虽然它不能回答更广泛的问题,但针对您的特定情况的一种选择是将制表符设为默认值,然后仅在不同时传递分隔符。
  • 在 Python 收到反斜杠之前解释它有什么问题?那不是意味着程序接收到一个制表符吗?
  • 谢谢 Amber,我目前已将逗号设置为默认值(在我的数据中更常见),但你说得对,它会解决我的问题...
  • 您面临的具体问题是什么?
  • 你是什么外壳? python -c'import sys; print sys.argv' '\t' 传递 \t 作为我的两个字符。你可以使用 .encode("string-escape")/.decode("string-escape") 来转换 Python 字节串文字形式。

标签: python command-line


【解决方案1】:

你是在 Bash 中做的吗?如果是这样,请尝试:

pythonscript.py --in_delimiter $'\t' --in_file input.txt

【讨论】:

  • +1,这比我的回答更好,因为你可以看到标签
  • 这很有趣,我刚刚了解了$'...',在为类似问题苦苦挣扎了几个小时之后。当我们使用#!/bin/sh 在 Linux 脚本中尝试这个技巧时,又浪费了一个小时:它不适用于 sh!但是对于 bash,是的。
  • 谢谢,这似乎解决了我的问题!顺便说一句,很酷的把戏。
【解决方案2】:

在 unix/linux 上,传递制表符很容易。您需要引用它,因为它是空格

要键入文字选项卡,请使用 ctrl-v tab

pythonscript.py --in_delimiter "   " --in_file input.txt
                                 ^
                                 | this is `ctrl-v` `tab`

或者,您可以为特殊情况进行映射

pythonscript.py --in_delimiter TAB --in_file input.txt

你在这样的代码中处理的

in_delimiter = {"TAB": "\t", "COMMA": ","}.get(in_delimiter, in_delimiter)

【讨论】:

  • 感谢您的回答,这些我都不知道 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-21
  • 2014-09-22
  • 2010-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多