在类对象列表中输入textfile,然后输出列表内容

2024-09-28 20:59:36 发布

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

作为当前项目的一部分,我试图将文本文件的内容加载到类对象的列表中,然后输出这些对象。粗略地看了一眼,我的指导老师说我的代码看起来不错,但是没有输出。我按回车键,然后…什么也没有。它甚至不打印“加载”的代码。它只是提示输入一个新的输入,就好像我在没有任何说明的情况下按了enter。我不知道这些对象是否被正确地加载到列表中,我认为它们没有。我只使用Windows控制台来运行这个,所以调试是有限的和缓慢的。在

我是Python的新手,但这不是Python课程,而是算法。但是我们的项目需要用Python编写,所以我在边走边学。我通常用C、C++或java编写代码。我学到的,我从这里学到的,还有我的老师给我的一些有用的教程。我已经在这里搜索过了,但是我看到的很多代码看起来像我所拥有的。所以,我问你们这些非常聪明的人。。。在

我错过了什么?我没有正确地把文件载入内存吗?打印线不正确吗?还有什么我忽略的吗?在

任何帮助都将不胜感激。在

更新:由于下面的好人,它正在运行,但现在我得到了以下错误:

Traceback (most recent call last): File "D:\CPSC335\Project_2\project2.py", line 28, in main() File "D:\CPSC335\Project_2\project2.py", line 24, in main packages.append(DebianPackage(*line.split())) TypeError: init() missing 2 required positional arguments: 'votes' and 'size'

所以,看起来我没有正确地从文本文件中提取数据。这是一个问题吗?在

命令输入:

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

文件名:软件包.txt在

^{pr2}$

代码: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()

Tags: 代码nameinpyselfprojectpackagesize
2条回答

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

if __name__ == "__main__":
    main()

升级版:

而且您的类不正确,您应该使用__init__,而不是{}:

^{pr2}$

在模块中定义了一个名为main()的类和函数,但没有调用它。所以在定义之后称之为。放在结尾:

main()

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

^{pr2}$

最好使用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()

相关问题 更多 >