读取文件.txt以构建字典

时间:2016-10-21 09:52:23

标签: python python-2.7

我有一个包含以下内容的filename.txt:

a c

b c

b e

c d

c e

c h

f g

f h

g h

我想用两个参数定义一个函数,比如
     def load_graph(graph,filename) 然后将其表示为一个名为graph的字典,其中键表示顶点,值是顶点邻居列表

create or replace PACKAGE BODY MY_PP AS

  PROCEDURE my_proc(execProc IN NUMBER DEFAULT 1) IS

  cursor c_cursor1 is SELECT "KEY", "VALUE" FROM MY_TABLE_1;
  cursor c_cursor2 is SELECT "KEY", "VALUE"  FROM MY_TABLE_2;

  vc_my_variable1 VARCHAR2(100);
  vc_my_variable2 VARCHAR2(100);
  vc_my_variable3 VARCHAR2(100);
  vc_my_variable4 VARCHAR2(100);

  sql_query VARCHAR2(400);

  v_data_type VARCHAR2(100);

  BEGIN

  OPEN c_cursor1;
    LOOP

      FETCH c_cursor1 INTO vc_my_variable1, vc_my_variable2;
      EXIT WHEN c_cursor1%NOTFOUND;         

        SELECT DATA_TYPE INTO v_data_type FROM USER_TAB_COLS WHERE COLUMN_NAME = vc_my_variable1 AND TABLE_NAME = 'MY_TABLE_3';

        IF v_data_type = 'VARCHAR2' THEN
            sql_query := 'UPDATE MY_TABLE_3 SET :1 = :2;';
        END IF;


        IF v_data_type = 'NUMBER' THEN
            sql_query := 'UPDATE MY_TABLE_3 SET :1 = TO_NUMBER(:2);';
        END IF;

        EXECUTE IMMEDIATE sql_query USING vc_my_variable1, vc_my_variable2;




    END LOOP;

  CLOSE c_cursor1;


  OPEN c_cursor2;
    LOOP

      FETCH c_cursor2 INTO vc_my_variable3, vc_my_variable4;
      EXIT WHEN c_cursor2%NOTFOUND;

       SELECT "DATA_TYPE" INTO v_data_type FROM USER_TAB_COLS WHERE COLUMN_NAME = vc_my_variable3 AND TABLE_NAME = 'MY_TABLE_4';

        IF v_data_type = 'VARCHAR2' THEN
            sql_query := 'UPDATE MY_TABLE_4 SET :1 = :2;';
        END IF;


        IF v_data_type = 'NUMBER' THEN
            sql_query := 'UPDATE MY_TABLE_4 SET :1 = TO_NUMBER(:2);';
        END IF;

        EXECUTE IMMEDIATE sql_query USING vc_my_variable3, vc_my_variable4;




    END LOOP;

  CLOSE c_cursor2; 

  commit;

  END my_proc;

END MY_PP;

2 个答案:

答案 0 :(得分:0)

据推测,你想对图形做一些事情,所以你应该使用像networkx或igraph这样的东西来阅读边缘列表并构建图形。如果这些软件包不可用,那么以下应该可以解决这个问题:

#!/usr/bin/env python

def edge_list_to_neighbours(edge_list, directed=False):
    neighbours = dict()
    for source, target in edge_list:
        if not source in neighbours:
            neighbours[source] = [target]
        else:
            neighbours[source] += [target]

    if not directed: # add reverse edge
        for source, target in edge_list:
            if not target in neighbours:
                neighbours[target] = [source]
            else:
                neighbours[target] += [source]

    return neighbours

def read_edge_list(file_path):
    with open(file_path, 'r') as f:
        lines = f.readlines()
    return [line.strip().split() for line in lines]

if __name__ == '__main__':
    edges = read_edge_list('filename.txt')
    neighbours = edge_list_to_neighbours(edges)
    print neighbours

答案 1 :(得分:0)

强烈建议/建议先自我尝试并发布您尝试过的代码片段,并将其作为良好实践面临问题。

考虑到文件中的每一行都有一条边信息,你可以这样做:

file_data = open("filename.txt")

graph = {}

for line in file_data:
    print line
    fields = line.strip("\n").split(" ")
    key = fields[0]
    value = fields[1]
    if key not in graph:
        graph[key] = [value]
    else:
        graph[key].append(value)

    if value not in graph:
        graph[value] = [key]
    else:
        graph[value].append(key)
希望这就是你要找的东西!