Python文件字符串比较

时间:2014-08-07 21:24:54

标签: python file-comparison

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

  

文件pos Mem pos ID Text

     

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

     <00> 00000000004D 00000040004D 0!此程序无法在DOS模式下运行。

     

0000000000A0 0000004000A0 0 Rich!

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

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

4 个答案:

答案 0 :(得分:2)

这个怎么样:

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()功能

上的文档

答案 1 :(得分:1)

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

假设您已经知道如何阅读该文件,您可以指定最多3个分割:

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

答案 2 :(得分:1)

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

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 :(得分:0)

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.'