如何跳过循环中的项目

时间:2016-05-25 14:13:05

标签: python loops pandas append

我正在尝试使用来自5个不同来源的所有报纸文章创建一个列表。它们以JSON格式存储。所有文章都存储在包含报纸和年份(垃圾邮件2005-2015)的不同文件中。问题是其中一份报纸仅适用于2014-15,因此当我将所有内容循环在一起时,我会收到错误。这是我的尝试:

import json
import nltk
import re
import pandas

appended_data = []

for i in range(2005,2016):
    df0 = pandas.DataFrame([json.loads(l) for l in open('SDM_%d.json' % i)])
    df1 = pandas.DataFrame([json.loads(l) for l in open('Scot_%d.json' % i)])
    df2 = pandas.DataFrame([json.loads(l) for l in open('APJ_%d.json' % i)])
    df3 = pandas.DataFrame([json.loads(l) for l in open('TH500_%d.json' % i)])
    df4 = pandas.DataFrame([json.loads(l) for l in open('DRSM_%d.json' % i)])
    appended_data.append(df0)
    appended_data.append(df1)
    appended_data.append(df2)
    appended_data.append(df3)
    appended_data.append(df4)


appended_data = pandas.concat(appended_data)

doc_set = appended_data.body

我的问题是;这段代码是否符合我的目标? (随着时间的推移,创建一份包含每份报纸所有文章的body的单一列表);并且,我如何以我跳过第一份报纸(SDM)的2005-2013年的方式对其进行编程

2 个答案:

答案 0 :(得分:1)

对于跳过部分,您可以:

for i in range(2005,2016):
    if i > 2013:
        df0 = pandas.DataFrame([json.loads(l) for l in open('SDM_%d.json' % i)])
        appended_data.append(df0)
    df1 = pandas.DataFrame([json.loads(l) for l in open('Scot_%d.json' % i)])

要知道代码是否按预期执行,我们需要这样的样本数据。

答案 1 :(得分:1)

首先,您需要检查python的版本,以确定在找不到文件名时引发的错误类型,如Python's "open()" throws different errors for "file not found" - how to handle both exceptions?中所述

其次,如果某些文件出现问题,您应该检查所有可能性。

一种方法是

  1. 创建一个文件名前缀列表[' SDM',' Scot',' AP'' TH500', ' DRSM&#39)

  2. 多年来
  3. 循环

  4. 在名称列表中将文件名创建为循环

  5. try: except对中打开文件以处理myfile中的任何问题。或者,您也可以在if中使用os.path.exists()以避免尝试除外。但是,除非出现其他问题,否则你应该尝试除了配对。

  6. 将数据读入df = pandas.DataFrame([json.loads(myfile))请注意,您还应将其封装为try ... except

  7. 关闭该文件,以便您没有太多打开。

  8. 现在将df附加到您正在创建的列表中。

  9. 这应该处理这种情况。