PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : python3 csv.reader



Huhn Hur Tu
13.01.17, 12: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, 12: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, 07:00
Wenn du mir auch ein Beispiel fuer das Einlesen hast, waere mir sicher auch geholfen

Gruss Stefan

Huhn Hur Tu
16.01.17, 09: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, 22: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