读取多个 TXT 文件,然后将每个文件另存为 XLSX 文件,每个文件具有相同的标头



我的任务是使用在文本文件中提供给我的SAP自定义报告 - 下面的示例(删除了名称并使此示例的所有值为0.00(。任务是使用此数据并从此数据创建 xlsx 文件。我在特定文件夹中有 100 多个这样的 txt 文件。我将如何将其加载到 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 |

从文本文件中读取并将每一行作为项目添加到列表中可以按如下方式完成:

lines = []
with open('input_file.txt', 'r') as textinputfile:
for readline in textinputfile:
lines.append(readline)

由于文本报告字段的长度是固定的,因此您可以使用一个函数提取标题,并使用另一个函数提取数据。因此,在示例中,每行数据为 151 个字符。由于标头要短得多,因此您可以轻松知道当前循环中的行是来自标头还是数据。

我建议将行拆分为":",如果它是标题,则按"|"拆分行,如果是数据。在循环结束时,您将拥有正确分隔字段的每一行。

如果您在管理数据方面遇到进一步的麻烦,或者您需要更多详细信息,我建议使用正则表达式模块。

最新更新