У меня есть код, который ранее обрабатывал файлы .csv с помощью модуля python csv .Поскольку нашим исходным материалом на самом деле является Excel, было бы намного проще, если бы мы могли работать непосредственно с файлами .xlsx, поэтому я нашел openpyxl и начал с этим играть - похоже, что он должен делать то, что мынеобходимость.
Ранее у нас был простой / стандартный блок кода, который использовал csv.reader и islice, чтобы захватывать по одной строке за раз и присваивать кучу значений для каждой строки:
with open(csvfile) as f:
reader = csv.reader(f, dialect='excel')
for row in islice(reader, 28,29):
[ifile, in_time, dur, day, sess, flight, dive] = row
Функция csv.reader возвращает каждую строку в виде списка строк, чего и ожидает остальная часть программы (в данном случае) моей локальной переменной строки.Однако Openpyxl, похоже, хочет вернуть генератор (что имеет смысл): я могу просто взять этот генератор, привести все значения к строкам, добавить эти строки во временный список, а затем назначить все исходные переменные элементам вэтот временный список.Но мне кажется, что должен быть более элегантный способ - я довольно новичок во всем этом питонском концерте, но всегда есть гораздо более чистый способ делать такие вещи, как этот.
wb = openpyxl.load_workbook('tunnel.xlsx')
sheet = wb.active
for row in sheet.iter_rows(min_row=2, min_col=1, max_row=4, max_col=7):
# build a temporary list to store the actual cell values
my_cell_values = []
for cell in row:
my_cell_values.append(str(cell.value))
[ifile, in_time, dur, day, sess, flight, dive] = my_cell_values
Предложения приветствуются здесь.Это работает просто отлично, но мне это не совсем "смотрится"