как прочитать файл Excel и преобразовать содержимое в список списков в python? - PullRequest
0 голосов
/ 19 июня 2020

У меня есть эти данные в файле excel (каждая строка в ячейке):

#module 0 size: 9 bs: 2.27735e-08 
1 35 62 93 116 167 173 176 182 
#module 1 size: 5 bs: 0.00393944 
2 11 29 128 130 
#module 2 size: 13 bs: 1.00282e-07 
8 19 20 25 26 58 67 132 150 153 185 187 188 

Я хочу прочитать данные из файла Excel и составить список списков из четных строк.
желаемый результат:

[[1,35,62,93,116,167,173,176,182],
[2,11,29,128,130],
[8,19,20,25,26,58,67,132,150,153,185,187,188]]

Ответы [ 4 ]

2 голосов
/ 19 июня 2020

Библиотека xlrd идеально подходит для работы с файлами Excel.

import xlrd

def main():
    # Path to excel file
    file_path = ('PATH_TO_FILE')

    # Import complete excel workbook
    excel_workbook = xlrd.open_workbook(file_path)
    # Import specific sheet by index
    excel_sheet = excel_workbook.sheet_by_index(0)

    # Create array for each row
    relevantData = []
    # Loop through each row of excel sheet 
    for row in range(excel_sheet.nrows): #nrows returns number of rows
        # If even
        if row % 2 != 0:
            # Convert row to array and append to relevantData array
            relevantData.append(rowToArray(row))

    print(relevantData)

def rowToArray(row):
    """
        excel_sheet.cell_value(row,0) -> Get the data in the row defined
        .split()      -> returns list of string, spilt at the white spaces, 
        map(int, <>)  -> map all values in list to integers
        lits(map(<>)) -> reconverts result into a list
    """
    return list(map(int, excel_sheet.cell_value(row,0).split()))


main()

Вывод:

[[1, 35, 62, 93, 116, 167, 173, 176, 182], [2, 11, 29, 128, 130], [8, 19, 20, 25, 26, 58, 67, 132, 150, 153, 185, 187, 188]]
2 голосов
/ 19 июня 2020

Посмотрите на OpenPyXL , я часто использую его для работы со сложными книгами на работе. После импорта строки в книге могут быть добавлены к спискам следующим образом:

for row in worksheet.rows:
    rowValuesList.append(row)

Каждая ячейка является собственным значением в списке. Затем вы можете добавить rowValuesList в главный список, чтобы создать свой список списков.

2 голосов
/ 19 июня 2020

Вы можете попробовать это, используя xlrd вместо pandas:

import xlrd

workbook = xlrd.open_workbook(r'Book1.xlsx')

ls = [str(workbook.sheet_by_index(0).cell_value(i,0)) for i in range(workbook.sheet_by_index(0).nrows) if not 'module' in str(workbook.sheet_by_index(0).cell_value(i,0))]
ls=[list(map(int,i.split(' '))) for i in ls]
print(ls)

Вывод:

[[1, 35, 62, 93, 116, 167, 173, 176, 182], [2, 11, 29, 128, 130], [8, 19, 20, 25, 26, 58, 67, 132, 150, 153, 185, 187, 188]]
1 голос
/ 19 июня 2020

Попробуйте импортировать в pandas, удалите строки, содержащие строку «Module», а затем разделите значения

EDIT : забыл получить часть списка.

import pandas as pd

# if its an csv you can define sep=' '. Change to your file location.
df = pd.read_excel(".//book.xlsx", header=None)
# name the columns to filter results
df.columns = ['temp']
# search for rows where "module" exists in string and get the opposite (the ~ before)
df = df[~df['temp'].str.contains('module')].reset_index()
# split() the values of the column expanding into new ones
df = df['temp'].str.split(" ", expand=True)
# transform into list
list_values = df.values.tolist()
# Filter Nones
filtered_list = [list(filter(None, l)) for l in list_values]
print(filtered_list)
# >>> [['1', '35', '62', '93', '116', '167', '173', '176', '182'],
# >>> ['2', '11', '29', '128', '130'],
# >>> ['8', '19', '20', '25', '26', '58', '67', '132', '150', '153', '185', '187', '188']]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...