Построение списка списков из 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]