2017-06-04 94 views
0

所以对于我的问题很抱歉,如果它看起来很容易,但我是python的新手用户,我无法找到解决它的方法。Python创建一个列表文件并写入查询

我有一个“dish.py”文件,其中包括一些子列表

Fruits={"Ap":Apple 
     "Br":Black Mulberry 
     "Ch":Black Cherry 
     } 
Meals={"BN":Bean 
     "MT":Meat 
     "VG":Vegetable 
     } 
Legumes={"LN":Green Lentil 
     "P": Pea 
     "PN":Runner Peanut 
     } 

我想在教学贯彻守则的dish.py文件在最后,我想里面创建一个查询该文件的

with open("/home/user/Py_tut/Cond/dish.py", 'r') as dish: 
      content = dish.read() 
print dish.closed 
dm=dict([dish]) 
nl=[x for x in dm if x[0]=='P'] 
for x in dm: 
    x=str(raw_input("Enter word:")) 
    if x in dm: 
     print dm[x] 
    elif x[0]==("P"): 
     nl.append(x) 
     print .join(nl) 

它可能看起来很混乱,但

  1. dm=dict([dish])我想创建一个字典阙RY
  2. nl=[x for x in dm if x[0]=='P']我想写的话开始的 “P” 字母

这里是我的问题:

1.问:我想有一个与我dish.py文件有问题。我如何重新组织它?

2.问:我如何申请查询该文件并提取单词,“P”开头 非常感谢你提前

+1

你为什么要在内存中读取你的'dish.py'文件,而不是让Python解释器为你解析它? (当然,除了定义的'dict'是用错误的语法编写的,但是为什么当它不应该是Python文件时将它称为'dish.py') – zwer

+0

我根本不知道如何,这就是为什么我写了一个非常糟糕的形状。我从头开始了解如何解析等,谢谢你的评论 –

回答

1

dict()无法加载字符串:

>>> dict("{'a': 1, 'b': 2}") 
Traceback (most recent call last): 
File "<pyshell#0>", line 1, in <module> 
    dict("{'a': 1, 'b': 2}") 
ValueError: dictionary update sequence element 0 has length 1; 2 is required 

作序这将是("{", "'", "a", "'", ":",...

相反,我会用json MOD请更改dish.py格式(将扩展名更改为.json并使用JSON语法)并更改代码。

dish.json

{ 
    "Fruits": { 
    "Ap": "Apple", 
    "Br": "Black Mulberry", 
    "Ch": "Black Cherry" 
    }, 
    "Meals": { 
    "BN": "Bean", 
    "MT": "Meat", 
    "VG": "Vegetable" 
    }, 
    "Legumes": { 
    "GL": "Green Lentin", 
    "P": "Pea", 
    "PN": "Running Peanut" 
    } 
} 

__init__.py

import json 
with open("/home/user/Py_tut/Cond/dish.py", 'r') as dish: 
    content = dish.read() 
print(dish.closed) 
dm = json.loads(content) # loads JSON 
nl=[x for x in dm if x[0]=='P'] 
for x in dm: 
    x = str(raw_input("Enter word:")) 
    if x in dm: 
     print dm[x] 
    elif x[0] == ("P"): 
     nl.append(x) 
     print "".join(nl) 
  • Q:怎样可以应用查询文件并提取以“P”开头的单词非常感谢您提前
  • 假设你想通过空间或换行分隔每个字符串,并将其退回到一个列表,我应该这样做:

    import re #Importing RegExp module 
    
    def wordsBeginP(): 
        with open("words.txt") as wordsfile: # Querying a file 
        words = wordsfile.open 
    
        parsed = re.sub(r"\n", " ", words) # Replace \n to " " 
        return [for i in parsed.split(" ") if i[0] == "P"] # Return list of words 
    
    +0

    非常感谢你纠正我的名单。我尝试导入JSON,可能是因为缺乏知识,我有一些问题,但这些给我一点,写脚本时应该去哪里。您的查询解决方案也很棒,它启发我。感谢您的宝贵贡献。 –

    1

    所以我认为你有比这两个问题/疑问。首先,如果你想包括'hardcoded'list s,dict s等,你可能想要include dishdish.py在你的工作目录中。

    也就是说,如果在Python文件中的数据结构实际上是在correct form

    Fruits={"Ap":'Apple', 
         "Br":'Black Mulberry', 
         "Ch":'Black Cherry' 
         } 
    Meals={"BN":'Bean', 
         "MT":'Meat', 
         "VG":'Vegetable' 
         } 
    Legumes={"LN":'Green Lentil', 
         "P":'Pea', 
         "PN":'Runner Peanut' 
         } 
    

    最后,你可以在所有的命名和包含在文件中的数据结构进行搜索,创建命名空间下include(这是碟子)。

    for f in [dish.Fruits,dish.Meals,dish.Legumes]: 
        for k,v in f.items(): 
        if k.startswith('P'): 
         print k,v 
    

    也有趣的你可能是pickling(虽然有一些警告)。

    +0

    非常感谢您为我的杂乱清单付出努力。我是一个新用户,甚至我不知道列表的正确形式。给我提供正确的表单非常棒。顺便说一下,我尝试将第二部分也用于我的代码以进行搜索。 –