Sto provando a creare questo script che controllerà il nome host del computer, quindi cercherà un elenco master per il valore per restituire un valore corrispondente nel file csv. Quindi apri un altro file e fai una ricerca e sostituisci. So che questo dovrebbe essere facile, ma non ho mai fatto così tanto in Python. Ecco quello che ho finora ...Python aiuta a leggere il file csv in errore a causa di terminazioni di linea
masterlist.txt (tab delimited)
Name UID
Bob-Smith.local bobs
Carmen-Jackson.local carmenj
David-Kathman.local davidk
Jenn-Roberts.local jennr
Ecco lo script che ho creato finora
#GET CLIENT HOST NAME
import socket
host = socket.gethostname()
print host
#IMPORT MASTER DATA
import csv, sys
filename = "masterlist.txt"
reader = csv.reader(open(filename, "rU"))
#PRINT MASTER DATA
for row in reader:
print row
#SEARCH ON HOSTNAME AND RETURN UID
#REPLACE VALUE IN FILE WITH UID
#import fileinput
#for line in fileinput.FileInput("filetoreplace",inplace=1):
# line = line.replace("replacethistext","UID")
# print line
In questo momento, è solo impostata per stampare l'elenco principale. Non sono sicuro se la lista debba essere analizzata e inserita in un dizionario o cosa. Ho davvero bisogno di capire come cercare il primo campo per il nome host e quindi restituire il campo nella seconda colonna.
Grazie in anticipo per il vostro aiuto, Aaron
UPDATE: Ho rimosso la linea 194 e ultima linea da MasterList.txt e poi ri-esecuzione dello script. I risultati sono stati i seguenti:
Traceback (most recent call last):
File "update.py", line 3, in for row in csv.DictReader(open(fname), delimiter='\t'): File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/csv.py", line 103, in next self.fieldnames File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/csv.py", line 90, in fieldnames self._fieldnames = self.reader.next() _csv.Error: new-line character seen in unquoted field - do you need to open the file in universal-newline mode?
Lo script corrente in uso è ...
import csv
fname = "masterlist.txt"
for row in csv.DictReader(open(fname), delimiter='\t'):
print(row)
io non sono sicuro di aver capito. il MasterList.txt ha . circa 300 righe Come posso estrarre l'UID per un determinato nome che deriva dal nome host – Aaron
@user: vedere la mia modifica – SilentGhost
Ok, vedo quello che stai dicendo Quindi questo crea un dizionario e li associa Come direbbe.. ho poi fare la ricerca sul dizionario per il 'nome'? Inoltre, mi sembra di essere sempre un errore quando provo a fare funzionare il script Errore: carattere di nuova riga visto nel campo non quotato - è necessario aprire il file in modalità universale-newline? – Aaron