Archiv verlassen und diese Seite im Standarddesign anzeigen : python3 csv.reader
Huhn Hur Tu
13.01.17, 11:10
Ich versuche zwei CSV einzulesen und aus beiden Daten zusammenzusuchen
Bevor ich das aber machen kann, habe ich die Daten nicht in einer Variable
- print(type(read_db_log))
- print(type(read_oms_log))
ergeben
<class '_csv.reader'>
<class '_csv.reader'>
with open(tmp_path + '/om_db_output.log') as db_log:
read_db_log = csv.reader(db_log, delimiter=';')
with open(tmp_path + '/reporting.log') as oms_log:
read_oms_log = csv.reader(oms_log, delimiter=';')
print(type(read_db_log))
print(type(read_oms_log))
for row in read_db_log:
if (row[0]) == search(read_oms_log[1]):
print(read_oms_log[0],read_oms_log[9], row[0], row[1])
out_dict.append(read_oms_log[0],read_oms_log[9], row[1])
Irgendwelche Ideen
Gruss Stefan
ThorstenHirsch
13.01.17, 11:43
So ganz habe ich Dein Problem nicht verstanden. Aber ich würde schon mal etwas anders an die Sache ran gehen, denn mit...
for row in read_db_log:
if (row[0]) == search(read_oms_log[1]):
...hat Dein Skript eine Komplexität von O(n²). Besser wäre es so: lies erst eine CSV komplett ein und baue daraus einen Hash mit der Spalte als Schlüssel, über die Du die Daten zusammen suchst (z.B. row[0] beim db_log).
Anschließend liest Du oms_log ein greifst auf den Hash zu um die Daten vom db_log hinzu zu schlüsseln. Damit hast Du nur noch O(n).
Hilft dir das?
Huhn Hur Tu
16.01.17, 06:00
Wenn du mir auch ein Beispiel fuer das Einlesen hast, waere mir sicher auch geholfen
Gruss Stefan
Huhn Hur Tu
16.01.17, 08:56
Hm.. mangels wissen, habe ich mal die beiden Logs line per line in je eine Liste gepackt.
Jetzt will ich line per line mit einem Wert aus Liste "read_db_log_list" einen Listensatz aus Liste "read_oms_log_list" haben, blos keine Ahnung wie am besten
with open(tmp_path + '/om_db_output.log') as db_log:
read_db_log = csv.reader(db_log, delimiter=';')
for row in read_db_log:
read_db_log_list.append([row[0], row[1]])
with open(tmp_path + '/reporting.log', encoding='utf-8') as oms_log:
read_oms_log = csv.reader(oms_log, delimiter=';')
for row in read_oms_log:
read_oms_log_list.append([row[0], row[1], row[9]])
for row in read_db_log_list:
if (row[0]) == search(read_oms_log[1]):
print(read_oms_log[0],read_oms_log[9], row[0], row[1])
ThorstenHirsch
16.01.17, 21:46
Mit Python kenne ich mich leider nicht aus. Ich kann's nur halbwegs lesen, weil's sehr intuitiv ist.
So würde es in Ruby aussehen, was ich meine:
#!/usr/bin/env ruby
require 'csv'
db = 'om_db_output.log'
oms = 'reporting.log'
oms_hash = {}
CSV.foreach(oms, headers: false, col_sep: ';') do |row|
oms_hash[row[1]] = { sinnvoller_name1: row[0], noch_einer: row[9] }
end
CSV.foreach(db, headers: false, col_sep: ';') do |db_row|
if oms_hash[row[0]]
puts join ", ",
oms_hash[row[0]][:sinnvoller_name1],
oms_hash[row[0]][:nocheiner],
db_row[0],
db_row[1]
end
end
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.