主文件的“物件”,在保存在其他文件中的函数中使用

2024-04-25 10:28:50 发布

您现在位置:Python中文网/ 问答频道 /正文

在我的工作中,我收到了PDF文件的订单,而我需要把它们改写成Excel表格。Excel文件和PDF文件都有精确的时间结构,这是不变的,所以我决定自动化这个过程,并创建python脚本来完成它。你知道吗

目前,我即将结束,我只需要把最后的数据写入excel文件,但我有严重的问题,非常严重,我可能需要重写/重新设计我的一半代码(大约有500行)。你知道吗

“问题”是,我将代码分为3个文件:

  • main(我正在执行的那个)
  • 函数(存储所有复杂逻辑函数的位置)
  • config(存储常量和配置的位置)

但问题是,我在xlsxwriter的主文件中有,它创建Excel文件和工作表。你知道吗

正是这样:

# Creation of new EXCEL file
xlsx_file = 'Red_vyplaty_' + termin_file + '.xlsx'
print 'Creating excel file "%s"' % xlsx_file
excel_file = xlsxwriter.Workbook(xlsx_file)

# Adding sheet, called "Listky_obce_nad_300"
obce_nad_300_sheet = excel_file.add_worksheet('Listky_obce_nad_300')
print 'Adding data sheet "Listky_obce_nad_300" into "%s"' % (xlsx_file)
obce_nad_300_sheet.set_column(0, 0, 2)
obce_nad_300_sheet.set_column(1, 1, 2)

但是,我需要(或者更准确地说)在函数文件中创建一个函数,,它将有一个输入,并且基于这个输入,它将从配置常量文件中获取数据,并将它们写入这个表(obce\u nad\u 300\ sheet)。你知道吗

问题是,如果我创建如下函数:

def create_footer(suma_cell, starting_row, flag):
    """
    Function to creade footer of listok
    flag = 0 / 1 / 2 (data sheet where to write header)
    """
    obce_nad_300_sheet.write(row, 4, 'Test')

它(显然)会抛出异常,全局变量obce\u nad\u 300\u sheet不存在,bla bla bla..我确信你们都知道:)

我知道,我有两种解决方法:

  1. 将整个创建、添加和写入工作表从主.py,进入函数.py
    • 这可以做到,但是,这对我来说是太多的工作,而且大多数新函数将只调用一个xlsxwriter函数,所以有点浪费时间
  2. 在中创建这些新函数主.py文件
    • 虽然我不确定它是否会起作用,但我确信,在函数.py文件,以及主.py文件,将是完全丑陋和违反我的规则明确的代码。你知道吗

但我想有第三个选择,我还没有意识到,并将两者,简单和“好”???:)

PS:不,xlsxwriter不能打开/读取excel文件,它只能创建一个新的文件,所以如果我在函数中定义它,它将重写我以前写入文件的所有内容。


Tags: 文件函数代码pypdfxlsxexcelfile
1条回答
网友
1楼 · 发布于 2024-04-25 10:28:50

我觉得你的代码组织得不太好。不用太麻烦,我会使用obce_nad_300_sheet作为一个对象来移动它。像这样:

def create_footer(sheet, suma_cell, starting_row, flag):
    """
    Function to creade footer of listok
    flag = 0 / 1 / 2 (data sheet where to write header)
    """
    sheet.write(row, 4, 'Test')

我不知道图书馆是怎么运作的。它是通过调用write来“提交”更改,还是需要某种savecommit方法?你知道吗


在不太了解您的情况或库的情况下,我可能会创建一个继承自xlsxwriter.Workbook的对象,将表存储在该对象的属性中(可能是{"sheet_name": WorkSheet}的dict),并在该对象中编写方法。可能是这样的:

class MyWorksheet(xlsxwriter.Workbook):

    def __init__(self, *args, **kwargs):
        [...]
        super(MyWorksheet, self).__init__(*args, **kwargs)
        self.sheets = {}
        [...]

    def add_worksheet(self, name):
        [...]
        self.sheets[name] = super(MyWorksheet, self).add_worksheet(name)
        [...]

    def create_footer(self, sheet_name, suma_cell, starting_row, flag):
        [...]
        self.sheets[sheet_name].write(row, 4, "Test")
        [...]

然后在你所谓的main文件中:

my_sheet = MyWorksheet()
my_sheet.add_worksheet("Listky_obce_nad_300")

my_sheet.create_footer("Listky_obce_nad_300", suma, starting, flag)

相关问题 更多 >