我一直在使用这段代码:
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 文件并对其进行解码。但是,我意识到,当我将 count 和 print 语句放在 ValueError 中时,我在这里丢失了几乎一半正在扫描的文档——它们永远不会回到 main 方法。
有人可以向我解释一下 try 语句在做什么,以及为什么我在 except 部分丢失了文件。是不是因为 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:
似乎已经解决了这个问题。是否有一个原因?