【问题标题】:Python file string comparisonPython文件字符串比较
【发布时间】:2014-08-07 21:24:54
【问题描述】:

我正在尝试在两个文本文件中的字符串之间进行字符串比较。文本由 bintext 应用程序从 .exe 读取并生成格式如下的文件:

文件 pos 内存 pos ID 文本

======== ======= == ====

00000000004D 00000040004D 0 !这个程序不能在DOS模式下运行。

0000000000A0 0000004000A0 0 丰富!

我尝试用空格做line.split,但结果最后一列内容也用空格分隔。而不是[!this program cannot be run in dos mode] 我得到[!this,program,cannot,be,run,in,DOS,Mode,.]

有什么简单的方法可以将txt文件中的整个第3列放入数组而不拆分它?

【问题讨论】:

  • 你使用split的计数参数了吗?
  • 我没有,我把计数和参数玩了一下,它得到了我想要的结果。谢谢!

标签: python file-comparison


【解决方案1】:

这个怎么样:

data = []
for line in input_file:
    data.append(line.strip().split(' ', 3))

这会给你:

['00000000004D', '00000040004D', '0', '!This program cannot be run in DOS mode.']
['0000000000A0', '0000004000A0', '0', 'Rich!']

split() 函数的文档

【讨论】:

  • 我使用了这个建议并增加了拆分计数,因为文件没有完全被每列一个空格分隔。我最初尝试发布实际格式,但它只读取一个空格:\ 问题已解决。
【解决方案2】:

如果字符串的第一部分具有恒定长度,则使用切片;

In [1]: s = '00000000004D 00000040004D 0 !This program cannot be run in DOS mode.'

In [2]: s[28:]
Out[2]: '!This program cannot be run in DOS mode.'

【讨论】:

    【解决方案3】:

    正如您在 Python docs 中看到的那样,str.split 方法有一个可选的 maxsplit 参数,如果给出,则指定可以在列表上执行的最大拆分数。

    假设您已经知道如何读取文件,您可以指定最多 3 拆分:

    data = "00000000004D 00000040004D 0 !This program cannot be run in DOS mode."
    data.split(None, 3)
    

    【讨论】:

      【解决方案4】:
      In [93]: s = "00000000004D 00000040004D 0 !This program cannot be run in DOS mode."
      
      In [94]: s.rsplit("0",1)[-1] # rsplit once on the 0
      Out[94]: ' !This program cannot be run in DOS mode.'
      
            import re
      [96]: re.split("\d\s",s)[-1] # single digit followed by a space
      Out[96]: '!This program cannot be run in DOS mode.'
      

      【讨论】:

        猜你喜欢
        • 2016-08-19
        • 1970-01-01
        • 1970-01-01
        • 2022-01-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-16
        • 2017-08-13
        相关资源
        最近更新 更多