0

私はこのコードを使用しています:

def read_text_files(filename):
    # Creates JSON Decoder
    decoder = json.JSONDecoder()
    with open(filename, 'r') as inputfile:
        # Returns next item in input file, removes whitespace from it and saves it in line
        line = next(inputfile).strip()
        while line:
            try:
                # Returns 2-tuple of Python representation of data and index where data ended
                obj, index = decoder.raw_decode(line)
                # Remove object
                yield obj
                # Remove already scanned part of line from rest of file
                line = line[index:]
            except ValueError:
                line += next(inputfile).strip()                    
            if not line:
                line += next(inputfile).strip()
            global count
            count+=1
            print str(count)

all_files = glob.glob('Documents/*')
for filename in all_files:
    for data in read_text_files(filename):      
        rawTweet = data['text']
        print 'Here'

JSON ファイルを読み込み、デコードします。しかし、ValueError 内に count ステートメントと print ステートメントを配置すると、ここでスキャンされるドキュメントのほぼ半分が失われ、メイン メソッドに戻ることはありません。

try ステートメントが何をしているのか、なぜ例外部分でドキュメントが失われるのかを誰かが正確に説明してくれませんか。悪いJSONが原因ですか?

編集:より多くのコードを含める

現在、コードが投稿されているため、マシンは次のように出力します。

"Here"
2
3 etc...
199
Here
200 
Here (alternating like this until)...
803
804
805 etc...
1200

これは、JSON の一部が破損しているために発生していますか? ドキュメントの一部が重複しているためですか (一部は間違いなく重複しています)。

編集2:

興味深い、削除:

line=next(inputfile).strip()
while line

そしてそれを次のように置き換えます:

for line in inputfile:

問題を修正したようです。これには理由がありますか?

4

1 に答える 1