4

一連のファイルがあり、それぞれから特定の番号を抽出したいと考えています。各ファイルには、次の行があります。

name, registration num

そのちょうど 2 行後に登録番号があります。この番号を各ファイルから抽出したいと思います。それを辞書の値として入れます.誰でもそれがどのように可能か考えていますか?

実際に動作しない私の現在のコードは以下のようなものです:

matches=[]
for root, dirnames, filenames in os.walk('D:/Dataset2'):  
    for filename in fnmatch.filter(filenames, '*.txt'):   
        matches.append([root, filename])

filenames_list={}       
for root,filename in matches:
    filename_key = (os.path.join(filename).strip()).split('.',1)[0]

    fullfilename = os.path.join(root, filename)
    f= open(fullfilename, 'r')
    for line in f:
        if "<name, registration num'" in line:
            key=filename_key
            line+=2
            val=line
4

5 に答える 5

9

私は通常next()、1 行、通常はファイルのヘッダーをスキップしたいときに使用します。

with open(file_path) as f:
    next(f) # skip 1 line
    next(f) # skip another one.
    for line in f:
        pass # now you can keep reading as if there was no first or second line.

注: Python 2.6 以前では、使用する必要がありますf.next()

于 2013-05-05T11:47:32.510 に答える
0

一般的に言えば、ループ内の Python イテレーターに対して何かを実行したい場合、例えば 2 先を見据える場合、最初に見るべき適切な場所は to import itertoolsand look hereです。あなたの場合、の実装から恩恵を受けるかもしれません consume

この問題が以前に SO で取り上げられていないかどうかを確認する価値があります。編集:確かに-こちらを見てください。これには、Pythonイテレータの適切な説明が含まれています。

于 2013-05-05T11:18:43.550 に答える
0

そのようなものがうまくいくと思います...

f= open(fullfilename, 'r')
for line in f:
    if "name, registration num" in line:
        key=filename_key
        break
f.readline()
res = f.readline()[:-1] #removed trailin newline
于 2013-05-05T11:16:28.927 に答える
0
from itertools import islice
with open('data.txt') as f:
    for line in islice(f, 2, None):
        print line
于 2013-05-05T11:16:34.863 に答える