Python 读取多个txt文件,然后将每个文件另存为xlsx文件,每个文件的标题相同
我的任务是使用SAP自定义报告,该报告以文本文件形式提供给我-下面的示例(删除了名称,并将此示例的所有值设为0.00)。任务是使用此数据并根据此数据创建xlsx文件。我在一个特定的文件夹中有100个这些txt文件。如何将其加载到python中,并创建一个xlsx文件,将每个文件的头数据保存在表上方相同的位置/格式中 我有下面的代码为每个文件创建xlsx,但格式都很混乱。每个单元格/列/行都需要更好的格式 非常感谢您的帮助 当前代码:Python 读取多个txt文件,然后将每个文件另存为xlsx文件,每个文件的标题相同,python,python-3.x,pandas,Python,Python 3.x,Pandas,我的任务是使用SAP自定义报告,该报告以文本文件形式提供给我-下面的示例(删除了名称,并将此示例的所有值设为0.00)。任务是使用此数据并根据此数据创建xlsx文件。我在一个特定的文件夹中有100个这些txt文件。如何将其加载到python中,并创建一个xlsx文件,将每个文件的头数据保存在表上方相同的位置/格式中 我有下面的代码为每个文件创建xlsx,但格式都很混乱。每个单元格/列/行都需要更好的格式 非常感谢您的帮助 当前代码: import glob import os from 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个字符。因为标题要短得多,所以您可以很容易地知道当前循环中的行是来自标题还是数据 我建议将行按“:”拆分(如果是标题),并按“|”拆分(如果是数据)。循环结束时,每一行的字段都将正确分隔
如果您在管理数据方面遇到更多问题,或者需要更多详细信息,我建议使用regex模块。是的,逐行读取txt文件并在python列表或字典中收集数据相对容易。没有必要用熊猫来做这个。然后,您可以使用XlsxWriter()将它们编写为excel。如果您需要更多帮助,请尝试并发布您的代码。@576i您会使用readlines()或list吗?很抱歉,我从来没有做过这样的事情,因为我通常使用文件作为表格轻松上传到数据框中。使用“打开”(“文件名”)作为f1:对于f1中的行:使用行执行某些操作-谢谢你的建议。我应该在我的帖子中指定该文件只是一个示例,每个txt文件都有不同的长度。为了发布一个例子,它只是让发布这样的长度变得更容易。好吧,如果它们足够大,你可以使用相同的逻辑。比如说,标题永远不会大于100个字符,数据总是大于100个字符;您可以使用这种逻辑,也可以用“|”分割所有内容,只有一个字段的行将成为标题。那些你可以事后治疗的。