我需要从文件名中拆分文本,如下所示:'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
的{{1}}中的值。我试过这个:
oldtxt
这返回的是一些文字字符而不是我的预期。有什么帮助吗?
答案 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")