Построение списка списков из CSV-файла

у меня есть файл Excel(который я экспортирую как csv), который я хочу разобрать, но у меня возникли проблемы с поиском лучшего способа сделать это. Csv-это список компьютеров в моей сети и учетные записи в локальной группе администраторов для каждого из них. Я сделал что-то подобное с кортежами, но количество учетных записей для каждого компьютера варьируется от 1 до 30. Я хочу создать список списков, а затем просмотреть каждый список, чтобы найти учетные записи, которые должны быть там(администратор и т. д.) и удалите их, чтобы я мог экспортировать список только учетных записей, которые не должны быть локальным администратором, но есть. Файл csv имеет следующий формат:

"computer1"    Administrator    localadmin    useraccount
"computer2"    localadmin       Administrator 
"computer3"    localadmin       Administrator user2account

любая помощь будет оценили

EDIT: вот код, с которым я работаю

import csv 
import sys #used for passing in the argument
file_name = sys.argv[1] #filename is argument 1
with open(file_name, 'rU') as f:  #opens PW file
    reader = csv.reader(f)
    data = list(list(rec) for rec in csv.reader(f, delimiter=',')) #reads csv into a list of lists
    f.close() #close the csv

for i in range(len(data)):
    print data[i][0] #this alone will print all the computer names
    for j in range(len(data[i])) #Trying to run another for loop to print the usernames
        print data[i][j]

проблема заключается во втором цикле for. Я хочу иметь возможность читать через каждую строку и пока просто печатать их.

2 ответов


Это должно привести вас на правильный путь:

import csv 
import sys #used for passing in the argument
file_name = sys.argv[1] #filename is argument 1
with open(file_name, 'rU') as f:  #opens PW file
    reader = csv.reader(f)
    data = list(list(rec) for rec in csv.reader(f, delimiter=',')) #reads csv into a list of lists

    for row in data:
        print row[0] #this alone will print all the computer names
        for username in row: #Trying to run another for loop to print the usernames
            print username

последние две строки будут печатать всю строку (включая "компьютер"). Do

for x in range(1, len(row)):
    print row[x]

... чтобы избежать печати компьютера дважды.

обратите внимание, что f.close () не требуется при использовании конструкции "with", поскольку ресурс будет автоматически закрыт при выходе из блока "with".

лично я бы просто сделать:

import csv 
import sys #used for passing in the argument
file_name = sys.argv[1] #filename is argument 1
with open(file_name, 'rU') as f:  #opens PW file
    reader = csv.reader(f)
    # Print every value of every row. 
    for row in reader:
        for value in row: 
            print value

это разумный способ итерации через данные и должны дать вам твердую основу, чтобы добавить любую дополнительную логику требуется.


вот как я открыл a .csv-файл и импортированные столбцы данных в виде массивов numpy-естественно, вам не нужны массивы numpy, но...

data = {}

app = QApplication( sys.argv )
fname = unicode ( QFileDialog.getOpenFileName() )
app.quit()
filename = fname.strip('.csv') + ' for release.csv'

#open the file and skip the first two rows of data
imported_array = np.loadtxt(fname, delimiter=',', skiprows = 2)

data = {'time_s':imported_array[:,0]}
data['Speed_RPM'] = imported_array[:,1]