2016-07-04 6 views
0
in CSV Suche

ich Python 3.5.x Ich versuche, eine CSV-Datei zu analysieren bin mit derParsing und in Python

In Python viel Paragrah neue CSV-Datei in ihm und Identität und erhalte paar Matches und erstellen hat aus ihm

lässt Bildgebung ich habe 2 Reihen aber in Echtzeit werden mehr Zeilen

Beschreibung.

Welcom new joinee User1. your initial login id : and you get access to Depart "Accounting" applciation. with below access 

     acount user1 access modify 
     account user1 access readonly 

Thank you. any issue contact helpdesk 

Welcom new joinee User2. your initial login id : and you get access to Depart "Finance" Applciation. with below access 

      acount user2 access write 
      account user2 access read 

Thank you. any issue contact helpdesk 

Jetzt benutze ich „re.search“ zu bekommen, was ich will und an einem vailable

Beispiel lässt sich vorstellen, dass ich verwendet re.search und bekommen die 3 unten Spiele und in einer Variablen speichern erfolgreich

row 1 
     user_name =User1 
     Departement = Accounting 
     account =User1 
     access = modify and readyonly 

row 2 
     user_name =User2 
     Departement = Finance 
     account =User 
     access = write and read 

Was ich will in der cSV-Datei aussehen soll unter

Accounting,user1|modify\nuser1|readonly 
Finance ,User2|write\nuser2|Modify 

Hinweis: Es gibt '|' als Trennzeichen und ‚\ n‘ als Newline in user_name und Zugang valiables“

Stattdessen, was ich bekommen ist wie diese

Accounting,user1|modify\nuser1|readonly\nFinance,User2|write\nuser2|Modify 

Unten ist mein Code. Ich in der falschen Art und Weise zu tun soemthing werden könnte. besser meine Ergebnisse Weise

import csv 
import re 
import string 
file =open('test_input.csv','r') 
out_file=open('test_out.csv','w') 
lines = file.readlines() 
for x in lines : 
    app_name=re.search('-------',x) 
    user_name=re.search('------',x) 
    department=re.search('......',x) 
    account=re.search('----',x) 
    access=re.search('-----',x) 
    if user_name: 
     e= user_name.group(1).strip() 
     e=e+"," 
     out_file.write(e) 
    if departement: 
     b = Departement.group(1).strip() 
     b=b + "," 
     out_file.write(b) 
    if account: 
     c = account.group(1).strip() 
     c=c +"|" 
     out_file.write(c) 
     if access: 
      d = access.group(1).strip() 
      d=d + "\\n" 
      out_file.write(d) 


file.close() 
out_file.close() 
+0

Können Sie auch die Regex-Suchwerte einschließen? "Abteilung" ist ebenfalls nicht definiert. Es gibt auch viele Tippfehler in Ihrer Datendatei. Sollen sie dort sein? –

+0

Ich änderte meine tatsächlichen Daten mit zufälligem Beispiel, also könnte es einige Tippfehler geben. Ich habe die Regex für die Suche nach diesem Beispiel nicht. aber meine Regex für meine Daten bekommen validieren Übereinstimmung – lkv

Antwort

0

Vereinfachen Sie Ihren Prozess schreiben, um die Zeile, die Sie gehen zu konstruieren, indem Sie string formatting zu erreichen:

s = '{},{}|{}\n{}|{}' 

die Daten zu Variablennamen zuweisen

if user_name: 
    user_name = user_name.group(1).strip() 
if Departement: 
    Departement = Departement.group(1).strip() 
if account: 
    account = account.group(1).strip() 
if access: 
    access = access.group(1).strip() 

Verwenden Sie die Variablennamen mit dem Format-String

out_file.write(s.format(Departement, user_name, 
          access1, user_name, 
          access2) 

scheint, Sie haben zwei access ‚s - es ist nicht klar, aus Ihrem Post, wie Sie extrahieren sie ... Ich werde dich damit umgehen lassen.

+0

Danke wwii ... es hat funktioniert .. – lkv