0

次のように2つの列を持つ2つのファイルがあります。

file 1
------
main 46
tag  23
bear 15
moon 2

file 2
------
main 20
rocky 6
zoo 4
bear 2

各ファイルの最初の 2 行を比較しようとしています。同じ単語がいくつかある場合は、数値を合計して新しいファイルに書き込みます。

ファイルを読み取り、foreach ループを使用して各行を処理しましたが、ValueError:too many values to unpack が返されます。

import os
from itertools import islice
DIR = r'dir'
for filename in os.listdir(DIR):
    with open(os.path.sep.join([DIR, filename]), 'r') as f:
        for i in range(2):
            line = f.readline().strip()
            word, freq = line.split():
                print(word)
                print(count)

ファイルには、テキストの各行の後に余分な空の行があります。\n; を検索しました。しかし、何もありません。その後、それらを手動で削除したところ、機能しました。

4

1 に答える 1

0

ラインにいくつのアイテムがあるかわからない場合は、便利なアンパック機能を使用できません。分割して、取得した数を確認する必要があります。例えば:

with open(os.path.sep.join([DIR, filename]), 'r') as f:
    for line in f:
        data = line.split()
        if len(data) >= 2:
            word, count = line[:2]

これにより、少なくともその数を含む行の最初の 2 つのフィールドが取得されます。他の行や余分なフィールドをどうするかを指定していないので、それ (その他の部分) はあなたに任せます。また、既存のコードにアクセントを付けるために、ストリップ部分も省略しました。行入力と分割では、改行とスペースが取り除かれますが、必ずしもすべての空白が取り除かれるとは限りません。

于 2017-04-11T17:57:49.453 に答える