2017-01-12 2 views
2

dies mit einem kürzesten Weg zur Arbeit ausImportieren eine Datei in Python und es dann mit

Was ich versuche, ist eher zu tun, als die Knoten und Strecken im Programm haben wird, um sie in einer Textdatei haben und lade sie lieber als die im Programm.

# Use Graph() 
    g = Graph() 
    #Define a new array 
    data = [] 
    # Open the import.txt file and import it into the array removing black space and splitting at commas. 
    with open('import.txt') as inputfile: 
     for line in inputfile: 
      data.append(line.strip().split(',')) 

ist, was ich bisher aber für das Leben von mir haben, können nicht in Ordnung, wie man dann in Daten, die diese Daten übernehmen [] und in die grafische Darstellung gelegt, so kann es für den Algorithmus verwendet werden. Jede Richtung würde geschätzt werden!

Im Code ist es als dies aufgeführt;

g = Graph() 

g.add_vertex('a') 
g.add_vertex('b') 
g.add_vertex('c') 
g.add_vertex('d') 
g.add_vertex('e') 
g.add_vertex('f') 

g.add_edge('a', 'b', 7) 
g.add_edge('a', 'c', 9) 
g.add_edge('a', 'f', 14) 
g.add_edge('b', 'c', 10) 
g.add_edge('b', 'd', 15) 
g.add_edge('c', 'd', 11) 
g.add_edge('c', 'f', 2) 
g.add_edge('d', 'e', 6) 
g.add_edge('e', 'f', 9) 

Allerdings möchte ich dies in eine Textdatei legen, so dass es leicht geändert werden kann. Ein Beispiel für die Textdatei-ID, die Sie verwenden möchten, ist;

'a', 'e', 2 
'a', 'b', 5 
'b', 'c', 9 
'e', 'c', 8 
'e', 'd', 7 
'd', 'c', 1 
+2

Was ist 'Graph'? –

+0

@ScottHunter Tut mir leid, ich habe den Link aktualisiert, ich habe nicht bemerkt, dass es pleite war. Hoffentlich kann das besser erklären, als ich kann. Es wird jedoch zum Speichern der Knoten und Stützpunkte für die Berechnungen verwendet. – Danny91

+0

An dieser Stelle, so weit wie _Python _ betrifft, ist 'data' nur eine Liste von Strings. Ich weiß nicht, was eine solche Zeichenfolge enthält, aber die Quintessenz ist, dass "Daten" in einige _data_ umgewandelt werden sollten, die für Sie relevant sind. Sie könnten dies wahrscheinlich tun, indem Sie [ast.literal_eval] (https://docs.python.org/3/library/ast.html#ast.literal_eval) oder den älteren (und unsafer) [eval] verwenden (https: // docs.python.org/2/library/functions.html#eval). – CristiFati

Antwort

2

Sie so etwas tun könnte:

Datei: graph_info.txt

a, e, 2 
a, b, 5 
b, c, 9 
e, c, 8 
e, d, 7 
d, c, 1 

Code: your_code.py

content = '' 
with open('graph_info.txt', 'r') as f: 
    content = f.read() 


vertex_dict = {} 
edges_list = [] 

lines = content.split('\n') 

for l in lines: 
    edge_info = l.split(', ') 
    edges_list.append(edge_info) 
    if edge_info[0] not in vertex_dict: 
     vertex_dict[edge_info[0]] = True 
    if edge_info[1] not in vertex_dict: 
     vertex_dict[edge_info[1]] = True 

# populating graph information 
g = Graph() 

for vertex_name, dummy in vertex_dict.iteritems(): 
    g.add_vertex(vertex_name) 

for edge_info in edges_list: 
    g.add_edge(edge_info[0], edge_info[1], int(edge_info[2])) 
1

Das ist wirklich nur Raffinerie Emerson Cardoso ' s ausgezeichnete Antwort. Da Sie eine Datei mit durch Kommas getrennten Werten erstellen, sollten Sie das Modul csv verwenden, um es zu analysieren. Außerdem sehe ich keine große Notwendigkeit, eine Liste der Scheitelpunkte/Kanten vor dem Parsing zu erstellen - alles, was Sie brauchen, ist eine Menge der Scheitelpunktnamen, so dass Sie alle Scheitelpunkte erstellen können, die Sie noch nicht gesehen haben.

# filename.csv 
a, e, 2 
a, b, 5 
b, c, 9 
e, c, 8 
e, d, 7 
d, c, 1 

 

# yourscript.py 
import csv 

g = Graph() 
vertices = set() 

with open("filename.csv") as csv_f: 
    reader = csv.reader(csv_f) 
    for line in reader: 
     from_, to, distance = line 
     if from_ not in vertices: 
      g.add_vertex(from_) 
      vertices.add(from_) 
     if to not in vertices: 
      g.add_vertex(to) 
      vertices.add(to) 
     g.add_edge(from_, to, distance) 
Verwandte Themen