【问题标题】:Get specific data from a .json file and save them to a 2D matrix/dictionary in python从 .json 文件中获取特定数据并将它们保存到 python 中的 2D 矩阵/字典
【发布时间】:2014-07-18 20:12:04
【问题描述】:

我是 python 新手,我一直在尝试对文件夹内的各种 .json 文件进行一些 NLP。我已经设法使用文章获取描述值的键分别从字典中获取和打印每个条目。问题是每次循环执行时,我都会将新数据值保存到同一个变量,即 body1。出于某种原因,我发现特别难做的是将每个数据条目(每个文章描述)保存在二维矩阵或字典表中,如果您这样的话,以便能够将所有条目保存在那里以供将来使用。类似的东西:

body1 = ['文件名','描述', '文件名','描述', '文件名','描述'] 因此,如果需要,我将能够使用 body1[name][description] 打印第二个文件的描述。现在在每次迭代中,上次迭代的数据都会丢失。我认为我的 C 配置的想法现在确实让我看到了答案。我会很感激任何想法。

提前谢谢你, 乔治

   import os
   import glob
   import json
   import nltk
   from nltk.corpus import stopwords
   from nltk import PorterStemmer

   stop = stopwords.words('english')
   stemmer=PorterStemmer()

   for name in glob.glob('/Users/jorjis/Desktop/test/*'):
     jfile = open(name, 'r')
     values = json.load(jfile)
     jfile.close()
     body1 = values['article']['description']
     tokens = nltk.wordpunct_tokenize(body1)
     tokens = [w.lower() for w in tokens]
     vocab = [word for word in tokens if word not in stop]
     print body1

【问题讨论】:

    标签: python arrays json dictionary processing


    【解决方案1】:

    您需要在循环外创建一个列表并附加值。

    final = [] # add values you want saved to final
    uniq_ident = 1
    for name in glob.glob('/Users/jorjis/Desktop/test/*'):
         jfile = open(name, 'r')
         values = json.load(jfile)
         jfile.close()
         body1 = values['article']['description']
         tokens = nltk.wordpunct_tokenize(body1)
         tokens = [w.lower() for w in tokens]
         vocab = [word for word in tokens if word not in stop]
         final.append([uniq_ident,vocab]) # append vocab or whatever values you want to keep
         uniq_ident += 1
         print body1
    

    你也可以使用 make final a dict 和 final = {} 并使用 final[uniq_ident] = vocab

    如果您想保留最终列表并在每次使用时附加一个字典:

     final.append({uniq_ident:vocab})
    

    【讨论】:

    • 谢谢!虽然我试过了,但得到了这个错误: Traceback (most recent call last): File "vocab.py", line 19, in tokens = nltk.wordpunct_tokenize(body1) File "/Library/Frameworks/Python.framework/ Versions/2.7/lib/python2.7/site-packages/nltk/tokenize/regexp.py",第 133 行,在 tokenize 中返回 self._regexp.findall(text) TypeError: expected string or buffer
    • 抱歉,您想保持什么价值观?我编辑了代码,无论你想保存什么值,都将它们附加到 final 中。您在 for 循环中分配的任何内容每次都会被覆盖
    • .json 格式是这样的: { "article": { "description": "some text", } } 我想在一个表中包含每篇文章的描述部分,其中 1 条目将是行:文件名和列:描述。我尝试了没有标记器的建议,结果是:[description1、description2、description3 等]。我需要有文章名称或唯一 ID 作为参考。我认为我需要 2 个 for 循环才能创建这样的 2D 结构。另一件事可能是将每一行作为字典条目,例如:[filename1:description1, filename2:description2, etc]。
    • 那行得通!非常感谢。我只需要一种方法来进行我提到的引用,对每个文件使用 1,2,3 之类的唯一 ID,或者理想情况下,该引用可以是文件名。非常感谢队友!
    • 不用担心,您可以使用每次循环增加的计数变量,如果您愿意,也可以将其附加为唯一标识符。
    猜你喜欢
    • 1970-01-01
    • 2021-07-10
    • 1970-01-01
    • 1970-01-01
    • 2022-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多