私はこのコードを使用しています:
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:
問題を修正したようです。これには理由がありますか?