• Как парсить текст при помощи python-docx?

    @Aset01 Автор вопроса
    Vindicar, данная библиотека не читает *. doc
  • Как парсить текст при помощи python-docx?

    @Aset01 Автор вопроса
    Vindicar, Извините
    ValueError: file 'D:\Новая папка\№40 КХ Егоровское.doc' is not a Word file, content type is 'application/vnd.openxmlformats-officedocument.themeManager+xml'
  • Как парсить текст при помощи python-docx?

    @Aset01 Автор вопроса
    Vindicar, Все равно ошибку выдает
  • Как парсить текст при помощи python-docx?

    @Aset01 Автор вопроса
    Vindicar, Ну а так вроде работает, парсит и сортирует 635d38ecb143e905256508.png
    635d38fc1cb8b576057600.png
  • Как парсить текст при помощи python-docx?

    @Aset01 Автор вопроса
    Vindicar, кстати часть кода
    if os.path.isfile(file) and filename.endswith('.docx') or filename.endswith('.doc'):

    Фигня не работает с расширением .doc
  • Как парсить текст при помощи python-docx?

    @Aset01 Автор вопроса
    Спасибо большое) я уже сообразил. Если интересно вот код, я очень слаб в программировании, если найдете решения по оптимизации кода буду рад посмотреть варианты
    import os
    from docx import Document
    import pandas as pd
    
    parse_table_list = []
    directory = 'D:\Новая папка'
    data_base = pd.read_excel('D:\Новая папка\База данных.xlsx')
    
    def parse_files(directory):
        file_list = []
        for filename in os.listdir(directory):
            file = os.path.join(directory, filename)
            if os.path.isfile(file) and filename.endswith('.docx') or filename.endswith('.doc'):
                file_list.append(file)
    
        for file in file_list:
            parse_table_docx(file)
    
    
    def parse_table_docx(file):
        doc = Document(file)
        all_tables = doc.tables
        data_tables = {i:None for i in range(len(all_tables))}
        indx = 0
        list_paragraphs = []
        find_text = 'действительны в случае поступления оплаты на расчётный счёт Продавца'
        for para in doc.paragraphs:
            indx += 1
            if len(para.text) > 0:
                list_paragraphs.append(para.text)
    
        for i in range(len(list_paragraphs) - 1):
            if find_text in list_paragraphs[i]:
                date_indx = list_paragraphs[i].find(find_text)
                date_in_text = list_paragraphs[i][date_indx + 69:len(list_paragraphs[i])-1]
    
        for i, table in enumerate(all_tables):
             data_tables[i] = [[] for _ in range(len(table.rows))]
             for j, row in enumerate(table.rows):
                 for cell in row.cells:
                     data_tables[i][j].append(cell.text)
    
        for i in data_tables:
             if data_tables[i][0][0] == 'Наименование товара':
                  if data_tables[i][0][1] == 'Ед. изм.':
                      for k in range(len(data_tables[i])):
                          if k >= 1 and k < len(data_tables[i])-1:
                              for l in range(len(data_tables[i][k])):
                                  if l < (len(data_tables[i][k])-1):
                                      parse_table_list.append(data_tables[i][k][l])
                              parse_table_list.append(date_in_text)
    
    def sorted_table(parse_table_list):
        parse_table_list = {
                              'Наименование товара':[parse_table_list[i] for i in range(0, len(parse_table_list), 6)],
                             'Ед. изм.':[parse_table_list[i] for i in range(1, len(parse_table_list), 6)],
                             'Количество':[parse_table_list[i] for i in range(2, len(parse_table_list), 6)],
                             'Цена за 1 л, кг, п.е. в тенге':[parse_table_list[i] for i in range(3, len(parse_table_list), 6)],
                             'Общая сумма, в тенге':[parse_table_list[i] for i in range(4, len(parse_table_list), 6)],
                             'Оплата до': [parse_table_list[i] for i in range(5, len(parse_table_list), 6)],
    
                              }
        return parse_table_list
    
    parse_files(directory)
    parse_table_list = sorted_table(parse_table_list)
    parse_total = pd.DataFrame(parse_table_list)
    
    output = parse_total.merge(data_base, left_on='Наименование товара', right_on='Наименования товара')
    del output['Наименования товара']
    companies = output['Наименование компании'].unique()
    
    
    with pd.ExcelWriter('D:\Новая папка\Итог.xlsx') as writer:
        for comp in companies:
            cur = output[output['Наименование компании'] == comp]
            del cur['Наименование компании']
            cur.to_excel(writer, sheet_name=comp)
    
    print('Готово')