【问题标题】:Python Create a List file and write queryPython 创建一个 List 文件并编写查询
【发布时间】:2017-06-04 19:20:36
【问题描述】:

很抱歉我的问题看起来很简单,但我是 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])我想创建一个查询字典
  2. nl=[x for x in dm if x[0]=='P']我想写以“P”字母开头的单词

这是我的问题:

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

2。问:如何对文件应用查询并提取以“P”开头的单词 提前非常感谢您

【问题讨论】:

  • 您为什么要在内存中读取 dish.py 文件而不是让 Python 解释器为您解析它? (好吧,除了定义的 dict 是用错误的语法编写的,但是当它不应该是 Python 文件时,你为什么叫它 dish.py?)
  • 我根本不知道怎么写,这就是为什么我把它写得很糟糕。我从头开始了解如何解析等。无论如何感谢您的评论

标签: python list search text-extraction


【解决方案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 模块,更改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)
  1. 问:如何对文件应用查询并提取以“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

【讨论】:

  • 非常感谢您纠正我的列表。我尝试导入 json,可能是因为缺乏知识,我遇到了一些问题,但这些问题让我指出了在编写脚本时应该去哪里。您的查询解决方案也很棒,它启发了我。感谢您的宝贵贡献。
【解决方案2】:

所以我认为您的问题不止这两个。 首先,如果您想包含“硬编码”lists、dicts 等,您可能希望在工作目录中包含 dish.pyinclude dish

也就是说,如果你在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(即dish)创建的命名空间下搜索文件中命名和包含的所有数据结构。

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

pickling 可能对您来说也很有趣(尽管有一些警告)。

【讨论】:

  • 非常感谢您为我的杂乱清单付出了努力。我是一个新用户,甚至我都不知道列表的正确形式。为我提供正确的表格真是太好了。顺便说一句,我尝试在我的搜索代码中实现第二部分。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-26
  • 1970-01-01
相关资源
最近更新 更多