0

ファイルのリストがあります

DIRLIST = ['201008190000_15201_NC.GZ', '201008190000_15202_NC.GZ', 
'201008190000_16203_NC.GZ', '201008200000_15201_NC.GZ', '201008200000_15202_NC.GZ', 
'201008200000_16203_NC.GZ',]

そして、特定のファイルを選択したいと思います。たとえば、16203 が含まれる 2 つのファイルです。

私の最初の考えは、for ループで stringsplit を使用することでしたが、stringsplit は文字列の _ 以外には何も与えません - そして私は少し立ち往生しています。

何か案は?

4

4 に答える 4

5
filtered = [dir for dir in DIRLIST if '16203' in dir]
于 2012-02-23T09:40:50.867 に答える
1

ファイル名の形式 (日時、アンダースコア、id、アンダースコア、文字、ドット、GZ) がわかっている場合は、次を使用します。

[d for d in DIRLIST if d.split('_')[1] == '16203']

もう 1 つの命題 (simpleif '16203' in dirを使用すると、ファイル名も通過できるよう201008162030_15201_NC_GZになりますが、これは望ましくありません。

于 2012-02-23T09:53:01.817 に答える
1

「文字列の _ を超えるものは何も与えない」という意味がわからない

    >>> '201008190000_15201_NC.GZ'.split('_')
    ['201008190000', '15201', 'NC.GZ']

あなたが言ったような単純な条件だけが必要な場合は、Peter の提案で問題なく動作し、分割で試すよりも優れています。

于 2012-02-23T09:49:24.407 に答える
0
import re
[dir for dir in files if re.search("(_16203_)", ",".join(DIRLIST))]
于 2012-02-23T09:59:34.033 に答える