0

次のようなファイル名からテキストを分割する必要があります。'foo_bar_1_10.asc.gz'これらのファイルごとに、次のような対応するテキストリストがあります'1 10'。この対応するリストは、私が再作成したいものです。その理由は、不足しているファイルを見つけるために、すべてのファイルをマスターリストと比較する必要があるためです。したがって、最終的には2つのリストを比較する方法が必要です(違いはありますか?)

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

@@@ Update @@@行番号付きのリストが2つあります(unixのnlに似た関数を使用します-名前nlと出力は次のようになります。からの欠落値をチェックする必要があります1: 1 10。試しました。これ:2: 1 12newtxtoldtxt

s = set(nl(newtxt))
diff = [x for x in nl(oldtxt) if x not in s]
print diff

これが返すのはいくつかのテキスト文字であり、私が期待したものではありません。何か助けはありますか?

4

5 に答える 5

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

次に、次のように、最後の2つの部分をスペースで区切って結合します。

>>> numbers = ' '.join(subpieces[-2:])
>>> numbers
'1 10'
于 2012-09-26T20:40:05.940 に答える
0

いくつかのコメント (および、自分で考え出してよかったと思う解決策への道筋):

  • 期待した結果が得られないため、必ず\inをエスケープしてください。\foobar\f
  • .replaceメソッドは2 つの引数を使用します: 何を置き換えるか、何を置き換えるかです。あなたは1つ逃します。
  • を置き換える方法を知っていればfoo_bar_、'' などと拡張子を付けて同じことができます。_' '
于 2012-09-26T20:39:12.470 に答える
0

正規表現が一番簡単だと思います。スペースを維持したいので、数字以外のすべての文字をスペースに置き換えてから、先頭と末尾のスペースを取り除きます

>>> import re
>>> a = 'foo_bar_1_10.asc.gz'
>>> re.sub('[^\d]',' ',a).strip()
'1 10'
于 2012-09-26T20:39:20.113 に答える
0

まあ言ってみれば

s = '1_10.asc.gz'

それで

l = s.split('.')[0].split('_')
#注意 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

于 2012-09-26T20:39:25.353 に答える
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")
于 2012-09-26T21:07:37.863 に答える