我将要创建一个通过XML(非常大,.5gb +)进行解析的脚本,并试图考虑如何有效地做到这一点。
通常,我会在AutoIt中执行此操作,因为这是我用于事物的“正常”语言,但是我认为在Python中执行此操作更为合适(此外,我想学习更多python)。
通常,我将如何使用XML创建所有需要的“列”的常量,使用该常量将其匹配并解析为一个数组(实际上是2个数组,是引起子记录的原因),然后将数组集作为JSON对象/字符串传递到记录系统。
在Python中,我不确定这是最佳途径。我正在考虑创建一个对象类,然后为要转换为JSON然后提交的XML的每个记录/行创建实例。如果我有雄心壮志,我什至会努力使其成为多线程的。我最好的选择是拔出一条记录,然后在我处理下一条记录时在后台提交,最多5到10条记录,但这也许不好。
我的问题是,看起来我是在使用类只是为了使用类,还是这样做的好理由?我承认我的思想被这样的事实所困扰:我以前没有(经常)使用过很多类,而是因为它整洁而新颖而使用它。
我是否真的有一种更好的方法可以忽略,因为我对新的/闪亮的概念或缺乏程序知识(这可能对我来说)视而不见?
我希望找到能指导我总体方向的答案-这是我学习语言的一部分,而自己进行研究确实可以帮助我了解自己的工作以及原因。不幸的是,我想在这一点上我需要一个指南。
答案 0 :(得分:1)
此辩论本质上是根据情况而定,将取决于您打算在程序中做什么。我要考虑的主要事情是,我是否需要将属性(数据)和功能(方法/功能)封装到一个分组中?
在这种情况下,使用类(对象)的利弊时,还会想到一些其他事情:
使用课程的原因:
原因是不使用课程:
create_date
,但只需要与age
一起使用-这样可以更好地将其自身用于没有存储空间的对象公开create_date
,而仅仅是一个函数get_age
)。 通常,Python是使用类的,因为它是一种面向对象的语言。但是,与诸如C ++和Java之类的更频繁使用的语言相比,您可以在Python中使用更多功能而“逃脱”而不使用类。如果您想使用一堂课来探索,我当然认为这是使用该语言的好练习。
编辑: 基于后续评论,我想提供一个使用命名参数实例化带有可选字段的类的示例。总体概述是,Python在考虑将哪个参数分配给内部功能时会解释参数的顺序。例如:
def get_info(name, birthday, favorite_color):
age = current_time - birthday
return [name, age, favorite_color]
在此示例中,Python根据调用方法时出现的顺序解释输入参数:
get_info('James', '03-05-1998', 'blue')
但是,Python还允许使用命名参数,该命名参数明确指定参数内部字段的分配:
get_info(name='James', birthday='03-05-1998', favorite_color='blue')
乍一看,此语法似乎更冗长,但实际上它提供了很大的灵活性,因为命名参数的顺序无关紧要,并且您可以为未传递到方法签名中的参数设置默认值:
def get_info(name, birthday, favorite_color=None):
age = current_time - birthday
return [name, age, favorite_color]
get_info(name='James', birthday='03-05-1998')
下面,我提供了一个更深入的工作示例,说明命名参数如何帮助您在评论中概述的情况(许多字段,并非全部都是必填字段)以各种方式构造该对象以了解如何需要非命名参数,但是命名参数是可选的,并且默认为__init__()
方法中指定的值:
class Car(object):
""" Initializes a new Car object. Requires a color, make, model, horsepower, price, and condition.
Optional parameters include: wheel_size, moon_roof, premium_sound, interior_color, and interior_material."""
def __init__(self, color, make, model, horsepower, price, condition, wheel_size=16, moon_roof=None, premium_sound=None, interior_color='black', interior_material='cloth'):
self.color = color
self.make = make
self.model = model
self.horsepower = horsepower
self.price = price
self.condition = condition
self.wheel_size = wheel_size
self.moon_roof = moon_roof
self.premium_sound = premium_sound
self.interior_color = interior_color
self.interior_material = interior_material
# Prints attributes of the Car class and their associated values in no specific order.
def print_car(self):
fields = []
for key, value in self.__dict__.iteritems():
fields.append(key + ': ')
fields.append(str(value))
fields.append('\n')
print ''.join(fields)
# Executes the main program body
def main():
stock_car = Car('Red', 'Honda', 'NSX', 290, 89000.00, 'New')
stock_car.print_car()
custom_car = Car('Black', 'Mitsubishi', 'Lancer Evolution', 280, 45000.00, 'New', 17, "Tinted Moonroof", "Bose", "Black/Red", "Suede/Leather")
custom_car.print_car()
# Calls main() as the entry point for this program.
if __name__ == '__main__':
main()