剥离文本以创建列表并比较2个类似的列表

时间:2012-09-26 20:33:38

标签: python text strip

我需要从文件名中拆分文本,如下所示:'foo_bar_1_10.asc.gz'我对这些文件中的每一个都有相应的文本列表,如下所示:'1 10'。这个相应的列表是我想要重新创建的。原因是我需要将所有文件与主列表进行比较以查找丢失的文件。所以最终我需要一个比较两个列表的方法(差异?)任何帮助都会很棒

import os
newtxt = []
oldtxt = '\foobar\master_list.txt'
wd = '\foobar'


for file in os.listdir(wd):
    file = file.split('.')
    subpieces = file[0].split('_')
    numbers = ' '.join(subpieces[-2:])
    newtxt.append(numbers)
    print txt

@@@更新@@@ 我现在有2个带行号的列表(在unix中使用类似于nl的函数 - 名为nl,输出看起来像这个1: 1 102: 1 12。我需要检查是否缺少来自newtxt的{​​{1}}中的值。我试过这个:

oldtxt

这返回的是一些文字字符而不是我的预期。有什么帮助吗?

5 个答案:

答案 0 :(得分:2)

听起来你正在努力解决字符串解析部分。首先通过调用字符串.split方法将文件名拆分为多个部分,然后按句点分割:

>>> file = 'foo_bar_1_10.asc.gz'
>>> pieces = file.split('.')
>>> pieces
['foo_bar_1_10', 'asc', 'gz']

然后根据_字符将其分成子项:

>>> subpieces = pieces[0].split('_')
>>> subpieces
['foo', 'bar', '1', '10']

然后你可以将最后两个部分重新组合在一起,用空格分隔,如下所示:

>>> numbers = ' '.join(subpieces[-2:])
>>> numbers
'1 10'

答案 1 :(得分:0)

一些评论(以及一个解决方案的路径,你会感觉很好,你自己已经想到了):

  • 请确保您逃离\中的\foobar,因为\f无法满足您的期望
  • .replace方法使用 2 参数:您要替换的内容,替换它的内容。你错过了一个。
  • 如果您知道如何替换foo_bar_,例如'',则可以对扩展程序执行相同操作,并将_替换为' ' ...

答案 2 :(得分:0)

我猜regular expressions最容易。当您想要维护空格时,用空格替换每个非数字字符,然后去掉前导和尾随空格

>>> import re
>>> a = 'foo_bar_1_10.asc.gz'
>>> re.sub('[^\d]',' ',a).strip()
'1 10'

答案 3 :(得分:0)

让我们说

  

s ='1_10.asc.gz'

然后

  

l = s.split('。')[0] .split('_')
  #Note l = ['1','10']

如果您需要'1 10',请执行

  

item =''。join(l)

要执行'diff',请使用set difference(用法取决于您运行的python版本)。看到 http://docs.python.org/library/stdtypes.html#set
或者如果python2.4及以下: http://docs.python.org/library/sets.html

答案 4 :(得分:0)

使用正则表达式解析列表中的所有文件的另一个解决方案。

import os
import re
reg1 = re.compile("\d+_\d+")
newtxt = []
wd = '\foobar'
for file in os.listdir(wd)
    match = reg1.search(file)
    if match:
        newtxt.append(match.group().replace('_', ' '))      
        print file
    else:
        print("no match found")