0

テキスト ファイルの 2 行と 2 行をペアにして、キーと値のペアを辞書に追加しようとしています。これが機能しないのはなぜですか?

newdata = {}
os.chdir("//GOLLUM//tbg2//tbg2//forritGB")
f = open(filename)
for line1, line2 in f.readlines():
    newdata[line1] = line2

編集:私が得るエラーは

ValueError: too many values to unpack
4

2 に答える 2

0

すべての行を読み取り、最初の行 (シーケンス) を 2 つの変数に割り当てています。これは、最初の行が 2 文字で構成されている場合にのみ機能します。代わりに、ファイルを反復子として使用します。

newdata = {}
os.chdir("//GOLLUM//tbg2//tbg2//forritGB")
with open(filename) as f:
    for line1 in f:
        newdata[line1.strip()] = next(f, '').strip()

ここでnext()は、ファイルから次の行を読み取ります。

別の方法は、ペアワイズ レシピを使用することです。

from itertools import izip_longest

def pairwise(iterable):
    return izip_longest(*([iter(iterable)] * 2), '')

newdata = {}
os.chdir("//GOLLUM//tbg2//tbg2//forritGB")
with open(filename) as f:
    for line1, line2 in pairwise(f):
        newdata[line1.strip()] = line2.strip()

呼び出しに注意してstr.strip()、余分な空白 (各行の末尾にある改行を含む) を削除します。

于 2013-08-06T15:51:38.147 に答える
0
newdata = {}
os.chdir("//GOLLUM//tbg2//tbg2//forritGB")
with open(filename) as f:
    for line1, line2 in zip(*[iter(f)]*2):
        newdata[line1] = line2

また

os.chdir("//GOLLUM//tbg2//tbg2//forritGB")
with open(filename) as f:
    newdata = dict(zip(*[iter(f)]*2))
于 2013-08-06T15:54:14.957 に答える