(Python)将文件值转换为dict

时间:2018-12-06 06:05:30

标签: python

由于我正在为最终产品苦苦挣扎,因此将不胜感激。

我需要编写一个打开和读取文件的函数,返回一个字典,其中每个键是函数的名称,而值是该函数的参数列表。并且应该返回这样的内容。

{“ h”:[x],“ f”:[a,b],“ g”:[c]}

我正在传输的文件如下所示

def h(x):

   f(x + 4, 9)

def f(a,b):

    e = a * b
    g(e)

def g(c):

   b = 3

print(c)

打印(b)

到目前为止,我的代码看起来像这样,但是我不知道如何使它看起来像字典中的最终产品。

filename =“”

ddd = dict()

new = list()

def take_name():

global filename

filename= input("Please, type the name of the file:")

print(take_name())

def open_read():

   global handle

   handle= open(filename, 'r')

   for line in handle:

       line=line.rstrip()

       if line.startswith('def'):

            line=line.replace('def', " ")

            line=line.replace(':', " ")


             new.append(line)



print(new)

print(ddd)

print(open_read())

再次感谢您的帮助

2 个答案:

答案 0 :(得分:1)

最好使用Python的解析器而非正则表达式。

假设您的意思是<script type="text/javascript"> $(document).ready(function () { $("#RepfocusModelDropdown").change(function () { var Id = $(this).val(); if (Id != null) { $.ajax({ async: true, type: "POST", url: "./Create?handler=UserSelect", beforeSend: function (xhr) { xhr.setRequestHeader("XSRF-TOKEN", $('input:hidden[name="__RequestVerificationToken"]').val()); }, data: { Id: Id }, crossDomain: true, dataType: "json", success: function (response) { alert(JSON.stringify(response)); }, error: function (response) { alert(JSON.stringify(response)); } }); $.ajax({ type: "POST", url: "./Create?handler=AreaSelect", beforeSend: function (xhr) { xhr.setRequestHeader("XSRF-TOKEN", $('input:hidden[name="__RequestVerificationToken"]').val()); }, data: { Id: Id }, dataType: "json", success: function (response) { alert(JSON.stringify(response)); }, error: function (response) { alert(JSON.stringify(response)); } }); } }) }) (因为{'h': ['x'], 'f': ['a', 'b'], 'g': ['c']}看起来不是特别有用):

{"h":[x], "f":[a, b], "g":[c]}

但是,这只是一个基本片段,可能会更加复杂。首先,它只会为您提供顶级功能(您需要一些递归才能捕获子功能或方法)。另一方面,它忽略除位置(例如import ast with open(filename) as f: code = f.read() module = ast.parse(code, filename) functions = { statement.name: [arg.arg for arg in statement.args.args] for statement in module.body if isinstance(statement, ast.FunctionDef) } print(functions) )之外的各种可能的参数。如果您需要它们,则可以在了解AST的基础之后自行添加它们。

编辑kwargsinspect之间的显着区别是,您必须导入(即执行)源文件才能供{{1 }}; ast对源文件本身起作用,而不执行它。两种方法都是有效的。但是如果您对文件有安全性担忧,或者您无法执行该文件(例如,由于依赖关系),或者如果您想从执行的代码中获取您无法获取的内容(例如,我上面提到的本地定义的函数),应该更喜欢inspect

答案 1 :(得分:1)

您可以使用内置的python模块检查完成所需的操作。 这里有一些代码可以帮助您入门,在本示例中,我正在处理一个名为dummy.py的文件,但是您可以使用类似this.

的导入方式
df %>% 
  complete( Year, nesting( State, Grade ), fill = list( Yes = 0 ) ) %>%
  group_by( Year, State, Grade ) %>%
  summarise( x = sum( Yes ) / n() ) %>%
  spread( State, x, fill = 0 )

# # A tibble: 4 x 5
# # Groups:   Year [2]
#    Year Grade    AZ    CA    NY
#   <int> <chr> <dbl> <dbl> <dbl>
# 1  2000 A     0.667   0.5     1
# 2  2000 B     1       0       0
# 3  2001 A     0       0       0
# 4  2001 B     0       0       1