将文本文件输入到类对象列表中,然后输出列表内容

时间:2014-10-08 13:39:52

标签: python python-3.x

作为当前项目的一部分,我试图将文本文件的内容加载到类对象列表中,然后输出对象。粗略地看,我的导师说我的代码看起来不错,但没有输出。我按下输入,然后......没有。它甚至不打印“已加载”代码。它只是提示输入一个新的输入,好像我按下了没有指令的输入。我不知道对象是否被正确加载到列表中,我认为它们不是。我只使用Windows控制台来运行它,因此调试速度有限且速度很慢。

我是Python新手,但这不是python课程,而是算法。但是我们的项目必须用Python编写,所以我正在学习。我通常用C,C ++或Java编写代码。我学到了什么,我从这里学到了一些有用的教程,我的导师给了我。我在这里搜索过,但是我看到的很多代码看起来都像我所拥有的。所以,我问你们非常聪明的人......

我在这里缺少什么?我是否错误地将文件加载到内存中?打印线是否不正确?我还有什么别的吗?

任何帮助都将非常感激。

更新:它正在运行,感谢下面的好人,但现在我收到以下错误:

  

Traceback(最近一次调用最后一次):文件   “D:\ CPSC335 \ Project_2 \ project2.py”,第28行,in       main()文件“D:\ CPSC335 \ Project_2 \ project2.py”,第24行,在main中       packages.append(DebianPackage(* line.split()))TypeError: init ()缺少2个必需的位置参数:'votes'和'size'

因此,看起来我正在加载从文本文件中错误地提取数据。线路分裂是一个问题吗?

CMD输入:

C:\Python34>python D:\CPSC335\Project_2\project2.py D:\CPSC335\Project_2\packages.txt 5

filename:packages.txt

debianutils 128329 90
libgcc1 128327 46
dpkg 128294 2672
perl-base 127369 1969
debconf 121503 168
grep 121426 595
gzip 121346 142
login 121332 980
coreutils 121240 6505
bash 121229 1673

代码:project2.py

import sys

class DebianPackage:
    def __init__(self, name, votes, size):
        self.name = name
        self.votes = votes
        self.size = size

代码:project2.py(根据以下很多帮助更新)

def main():
    if len(sys.argv) != 3:
        print('error: you must supply exactly three arguments\n\n'+
            'usage: python3 <Python source code file> <text file> <n> <W>')
        sys.exit(1)

    filename = sys.argv[1]
    n = int(sys.argv[2])

    lines = open(filename).readlines()
    print('Loaded "' + filename)

    packages = []
    for line in lines:
        packages.append(DebianPackage(*line.split()))
    for package in packages:
        print(package.name + ' ' + package.votes + ' ' + package.size)

if __name__ == "__main__":
    main()

2 个答案:

答案 0 :(得分:0)

您在模块中定义了一个名为main()的类和函数,但未调用它。所以在定义之后调用它。把它放在最后:

main()

您的代码中还有其他问题。您的构造函数名称必须是:

def __init__(...)

最好使用readlines()代替read():

lines = open(filename).readlines()

并在for循环中使用行。所以你的代码将是这样的:

import sys

class DebianPackage:
    def __init__(self, name, votes, size):
        self.name = name
        self.votes = votes
        self.size = size

def main():
    if len(sys.argv) != 3: 
        print('error: you must supply exactly two arguments\n\n'+
            'usage: python3 <Python source code file> <text file> <n> <W>')
        sys.exit(1)

    filename = sys.argv[1]
    n = int(sys.argv[2])

    lines = open(filename).readlines()
    print('Loaded "' + filename)

    packages = []
    for line in lines:
        packages.append(DebianPackage(*line.split()))

    for package in packages:
        print(package.name + ' ' + package.votes + ' ' + package.size)

main()

答案 1 :(得分:0)

如果您希望脚本运行,当您通过python myapp.py执行脚本时,请通过以下方式放置或调用主逻辑:

if __name__ == "__main__":
    main()

<强> UPD:

您的课程不正确,您应该使用__init__,而不是_init_

class DebianPackage:
    def __init__(self, name, votes, size):
        self.name = name
        self.votes = votes
        self.size = size