прочитайте несколько текстовых файлов, затем сохраните каждый как файл xlsx с тем же заголовком для каждого - PullRequest
0 голосов
/ 27 сентября 2018

Мне было поручено использовать пользовательские отчеты SAP, которые предоставляются мне в текстовом файле - образец ниже (убрал имена и сделал все значения 0,00 для этого образца).Задача состоит в том, чтобы использовать эти данные и создавать файлы xlsx из этих данных.У меня есть 100 из этих текстовых файлов в определенной папке.Как бы я загрузить это в Python и создать файл xlsx, который сохраняет данные заголовка в том же месте / формате над таблицей для каждого файла?

У меня есть код ниже, который создает xlsx для каждого файла, но форматвсе перепутано.Мне нужно в лучшем формате для каждой ячейки / столбца / строки.

Любая помощь приветствуется!

Текущий код:

import glob
import os
from xlsxwriter import Workbook
filepath = 'mypath'
txtfiles = glob.glob(os.path.join(filepath, '*z*.txt*'))

def is_number(s):
    try:
        float(s)
        return True
    except ValueError:
        return False

for filename in txtfiles:
    readfiles = open(filename, 'r') 

    row_list = []

    for row in readfiles:
        row_list.append(row.split('\n'))

    column_list = zip(*row_list)

    workbook = Workbook(filename.replace('.txt', '.xlsx'))
    worksheet = workbook.add_worksheet('Sheet1')

    i = 0
    for column in column_list:
        for item in range(len(column)):
            value = column[item].strip()
            if is_number(value):
                worksheet.write(item, i, float(value))
            else:
                worksheet.write(item, i, value)
        i += 1
    workbook.close()

Пример отчета ниже:

                                                 SAMPLE REPORT TEMPLATE

Page Number:  1 of   1                                                                         Time of Output:06:37:00
Author of Report:ME                                                                            Date of Output:09/27/2018
Ledger:SAMPLE                                                                                  Version: 1
Currency: USD                                                                                  Fiscal Year:2018
Report Group:RANDOM                                                                            Period:  0 to   10

|.                                                           |    Outside MONEY    | Outside MONEY2      |    Outside MONEY3   |   Subtotal MONIES   |
|------------------------------------------------------------|---------------------|---------------------|---------------------|---------------------|
|   INCOME MONIES BEFORE CERTAIN CALCULATIONS SAMPLE         |                0.00 |                0.00 |                0.00 |                0.00 |
|------------------------------------------------------------|---------------------|---------------------|---------------------|---------------------|
|   1 - Line Data 1                                          |                0.00 |                0.00 |                0.00 |                0.00 |
|   1 - Line Data 2                                          |                0.00 |                0.00 |                0.00 |                0.00 |
|   1 - Line Data 3                                          |                0.00 |                0.00 |                0.00 |                0.00 |
|   1 - Line Data 4                                          |                0.00 |                0.00 |                0.00 |                0.00 |
|   1 - Line Data 5                                          |                0.00 |                0.00 |                0.00 |                0.00 |
|   2 - Line Data 1                                          |                0.00 |                0.00 |                0.00 |                0.00 |
|   2 - Line Data 2                                          |                0.00 |                0.00 |                0.00 |                0.00 |
|   2 - Line Data 3                                          |                0.00 |                0.00 |                0.00 |                0.00 |
|*  Sample Random Line W/ Star                               |                0.00 |                0.00 |                0.00 |                0.00 |
|   3 - Line Data 1                                          |                0.00 |                0.00 |                0.00 |                0.00 |
|   3 - Line Data 2                                          |                0.00 |                0.00 |                0.00 |                0.00 |
|   3 - Line Data 3                                          |                0.00 |                0.00 |                0.00 |                0.00 |
|   3 - Line Data 4                                          |                0.00 |                0.00 |                0.00 |                0.00 |
|   3 - Line Data 5                                          |                0.00 |                0.00 |                0.00 |                0.00 |
|   3 - Line Data 6                                          |                0.00 |                0.00 |                0.00 |                0.00 |
|   3 - Line Data 7                                          |                0.00 |                0.00 |                0.00 |                0.00 |
|   3 - Line Data 8                                          |                0.00 |                0.00 |                0.00 |                0.00 |

Ответы [ 2 ]

0 голосов
/ 27 сентября 2018

Поскольку поля вашего текстового отчета имеют фиксированную длину, вы можете извлечь заголовок одной функцией, а данные - другой.Итак, в вашем примере каждая строка данных составляет 151 символ.Так как заголовок намного короче, вы можете легко узнать, является ли строка в текущем цикле из заголовка или это данные.

Я бы предложил разделить строку на ':', если это заголовок и по'|'если это данные.К концу цикла у вас будет каждая строка с правильно разделенными полями.

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

0 голосов
/ 27 сентября 2018

Чтение из текстового файла и добавление каждой строки в виде элемента в список можно выполнить следующим образом:

lines = []
with open('input_file.txt', 'r') as textinputfile:
    for readline in textinputfile:
        lines.append(readline)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...