Python 正在尝试使用OOP打印导入的列表。运气不太好。OOP新手

Python 正在尝试使用OOP打印导入的列表。运气不太好。OOP新手,python,oop,csv,Python,Oop,Csv,我不太明白如何使用OOP。我试图创建一个打印机类,我可以随时调用,但我没有太多的运气。更大的程序很容易使用过程编程,但这样会更有效率 class data(): def __init__(self): import os import csv self.new_list = [] os.chdir('C:\Users\U2970\Documents\ArcGIS') with open('roadlog_in

我不太明白如何使用OOP。我试图创建一个打印机类,我可以随时调用,但我没有太多的运气。更大的程序很容易使用过程编程,但这样会更有效率

class data():
    def __init__(self):
        import os
        import csv
        self.new_list = []
        os.chdir('C:\Users\U2970\Documents\ArcGIS')
        with open('roadlog_intersection_export_02_18_2014_2.csv', 'rb') as f:
            reader = csv.reader(f)
            for row in reader:
                self.new_list.append(row)

    def printer(self):
        print self.new_list

out = data()
out.printer()

我很难准确地理解您的问题是什么,但是我可以给您一些关于代码和面向对象编程的反馈

首先,您通常不希望在对象中硬编码值,因为这将使它只对非常有限的应用程序有用。我建议包括一个加载到文件中的
load()
函数,然后是一个
printer()
函数,该函数将打印当前加载的内容

这看起来像这样:

class data(object):

    def __init__(self):
        self.current_list = None

    def load_file(self, filename):
        self.current_list = list(csv.reader(open(filename, 'r')))

    def printer(self):
        print(self.current_list)
out = data()
data.load('C:\Users\U2970\Documents\ArcGIS\roadlog_intersection_export_02_18_2014_2.csv')
data.printer()
def print_csv(filename):
    print list(csv.reader(open(filename, 'r')))

print_csv('C:\Users\U2970\Documents\ArcGIS\roadlog_intersection_export_02_18_2014_2.csv')
您可以这样使用它:

class data(object):

    def __init__(self):
        self.current_list = None

    def load_file(self, filename):
        self.current_list = list(csv.reader(open(filename, 'r')))

    def printer(self):
        print(self.current_list)
out = data()
data.load('C:\Users\U2970\Documents\ArcGIS\roadlog_intersection_export_02_18_2014_2.csv')
data.printer()
def print_csv(filename):
    print list(csv.reader(open(filename, 'r')))

print_csv('C:\Users\U2970\Documents\ArcGIS\roadlog_intersection_export_02_18_2014_2.csv')
此外,还应考虑使用ArcGIS替代ArcGIS

如果您想将其作为函数来执行(没有真正的理由编写如此浅的包装器),您可以执行以下操作:

class data(object):

    def __init__(self):
        self.current_list = None

    def load_file(self, filename):
        self.current_list = list(csv.reader(open(filename, 'r')))

    def printer(self):
        print(self.current_list)
out = data()
data.load('C:\Users\U2970\Documents\ArcGIS\roadlog_intersection_export_02_18_2014_2.csv')
data.printer()
def print_csv(filename):
    print list(csv.reader(open(filename, 'r')))

print_csv('C:\Users\U2970\Documents\ArcGIS\roadlog_intersection_export_02_18_2014_2.csv')

是什么让你觉得这样会更有效率?在这个项目中,效率也是一个真正的问题吗?我建议采用程序方法。以下是一些一般性建议:1。在您的SO问题中提到您使用的是Python 2,而不是Python 3。2.为类使用除“data”以外的更好的名称,并将名称大写。3.导入文件顶部的模块,而不是方法或函数内部的模块。4.没有必要为此创建一个类,只需将此代码放在函数中即可。(解释为什么会是一个关于OOP的扩展讨论,但请相信我。此外,在这样的一次性任务中,效率并不是一个真正的问题,但代码可读性是。保持简单。)不清楚您的实际问题是什么,不是为什么您认为这比过程版本更有效请描述您期望的内容与脚本实际执行的内容(包括任何错误)。一旦你指出了真正的问题是什么(即脚本没有做什么),有人将能够更有效地帮助你。嗯,这是一个大得多的计划的一小部分,但我试图缩小我处理的第一个问题,使之更加简洁。对不起,这个问题有点简明扼要。这更多的只是一个例子。非常感谢代码声明程序,这应该是一个很大的帮助。我会尽力做到的。那么,我可以进行打印类调用,还是应该坚持使用函数?看起来这两种情况都可能发生。@montana_geek我个人建议使用一个函数,或者重新评估为什么要这样做。在任何情况下,打印大的csv都不是你应该做的事情,更不用说重复了。所以我会在每次类调用时重置文件?有趣的程序中的每个函数都会根据不同的条件打印出一段.csv文件。我不会把整件事都打印出来的大约有235000行!非常感谢,我来试试你的建议!