[英]strip text to create list and compare 2 similar lists
我需要从文件名中拆分文本,如下所示: '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 10
和2: 1 12
我需要检查在遗漏值newtxt
从oldtxt
。我已经试过这样:
s = set(nl(newtxt))
diff = [x for x in nl(oldtxt) if x not in s]
print diff
这返回的是一些文本字符而不是我的预期。 有帮助吗?
听起来你正在努力解决字符串解析部分。 首先通过调用字符串.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'
一些评论(以及您自己想到的解决方案的路径):
\\
in \\foobar
,因为\\f
不会给你你期望的 .replace
方法使用2个参数:要替换的内容,替换它的内容。 你想念一个。 foo_bar_
,比如说'',你可以用扩展名做同样的事情,然后替换一个_
比如说' '
...... 我想正则表达式最简单。 当您想要维护空格时,用空格替换每个非数字字符,然后去掉前导和尾随空格
>>> import re
>>> a = 'foo_bar_1_10.asc.gz'
>>> re.sub('[^\d]',' ',a).strip()
'1 10'
让我们说吧
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
下面是使用正则表达式解析列表中所有文件的另一种解决方案。
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")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.