【问题标题】:Formatted Input in PythonPython中的格式化输入
【发布时间】:2010-12-30 03:08:12
【问题描述】:

我有一个特殊的问题。我只需要使用 python 读取(从 txt 文件中)出现在预定义偏移范围内的那些子字符串。假设是 5-8 和 12-16。

例如,如果文件中的一行是这样的:

abcdefghi akdhflskdhfhglskdjfhghsldk

然后我想读两个词——“efgh”和“kdhfl”。因为在单词“efgh”中,字符“e”的偏移量是5,“h”的偏移量是8。同理,另一个单词“kdhfl”。

请注意,空格也会添加到偏移量中。事实上,我文件中的空格并非在每一行中都“一致出现”,并且不能依赖于提取感兴趣的单词。这就是为什么,我必须依靠抵消。

我希望我能够把问题说清楚。

等待答案!

编辑 -

是的,每行中的空白数量可以改变并且也可以解释偏移量。例如,考虑这两行 -

abcz d 
a bc d 

在这两种情况下,我认为最后一个字符“d”的偏移量是相同的。正如我所说,文件中的空格不一致,我不能依赖它们。我需要根据它们的偏移量来选择字符。你的答案还成立吗?

【问题讨论】:

    标签: python file-io textinput


    【解决方案1】:

    假设它是一个文件,

    for line in open("file"):
        print line[4:8] , line[11:16]
    

    【讨论】:

      【解决方案2】:

      要从偏移中提取片段,只需将每一行读入一个字符串,然后使用切片 ([from:to]) 访问子字符串。

      不清楚你在说什么不一致的空白。如果空白添加到偏移量,它必须是一致的才有意义。如果空格量可以改变但实际上考虑了偏移量,则您无法可靠地提取数据。

      在您添加的示例中,只要 d 的偏移量保持不变,您就可以通过切片提取它。

      >>> s = 'a bc d'
      >>> s[5:6]
      'd'
      >>> s = 'abc  d'
      >>> s[5:6]
      'd'
      

      【讨论】:

      • 是的,空白的数量可以改变,也可以解释偏移量。例如,考虑这两行 - abc d a bc d 在这两种情况下,我认为最后一个字符“d”的偏移量是相同的。正如我所说,文件中的空格不一致,我不能依赖它们。我需要根据它们的偏移量来选择字符。你的答案还成立吗?
      • 对不起,忽略上面的评论。目前还不清楚。我已经对主要问题进行了编辑。
      • @Eli 非常感谢。我是 Python 的新手。现在我觉得这个问题我觉得这个问题很琐碎。抱歉打扰了:)
      【解决方案3】:

      是什么阻止您使用正则表达式?除了空格之外,偏移量是否有所不同?

      /.{4}(.{4}).{4}(.{4})/
      

      【讨论】:

      • 我对我的问题进行了一些编辑,以使其更清楚。我无法理解您的解决方案,但它仍然成立吗?
      • 正则表达式并不是万能的工具。对于在常量索引处提取数据,简单的切片更清晰、更快
      • 保存正则表达式,直到您确定简单的切片或字符串方法是不够的。 Python 字符串有许多非常好的方法。无需构建 RE 来匹配“^prefix”并调用 re.match,您只需使用 s.startswith("prefix");与 endwith 类似。在这种情况下,字符串切片优于斜线和点。
      • 正则表达式应该是最后的手段。
      • 我将它实现为正则表达式,因为有人说不清楚如何处理空格。如果您不在乎空格将要做什么,请务必切掉。但是,如果您要对空格做一些奇怪的事情(例如将制表符视为 8 个空格或其他东西),您将需要一个正则表达式。也就是说,从添加的示例看来,空格被视为字符,因此切片工作得很好。
      猜你喜欢
      • 1970-01-01
      • 2015-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-24
      相关资源
      最近更新 更多