在Python中读取文本并为数据分配类

在Python中读取文本并为数据分配类,python,class,readfile,Python,Class,Readfile,我一直在四处寻找,没有找到任何回答我问题的答案 基本上,我有一个包含以下数据的文件: Title - 19 Artist - Adele Year released - 2008 1 - Daydreamer, 3:41, 1 2 - Best for Last, 4:19, 5 3 - Chasing Pavements, 3:31, 7 4 - Cold Shoulder, 3:12, 3 Title - El Camino Artist - The Black Keys Year

我一直在四处寻找,没有找到任何回答我问题的答案

基本上,我有一个包含以下数据的文件:

Title - 19
Artist - Adele 
Year released - 2008
1 - Daydreamer, 3:41, 1
2 - Best for Last, 4:19, 5
3 - Chasing Pavements, 3:31, 7
4 - Cold Shoulder, 3:12, 3

Title - El Camino 
Artist - The Black Keys 
Year released - 2011 
1 - Lonely Boy, 3:13, 1 
2 - Run Right Back, 3:17, 10 

EOF 
我知道如何创建类,以及如何将对象分配给类,并将值分配给该对象,但我正准备对我应该如何处理文本的问题大发雷霆。从文本中,我需要为相册创建一个标题,并将相册的信息分配给它。除此之外还有更多的工作要做,还有更多的行要读,我只是不知道从哪里开始。我在谷歌上找到了两个“album.py”文件,但我无法确定如何将解决方案应用到我的案例中

是的,这是学校的作业。我做了一些挖掘,发现了一些相关的东西,但我就是不理解。我对编程基本上是新手,我已经取得了进步,但这似乎太离谱了

我知道我可以使用拆分(\n\n)并对一系列逐渐变小的列表进行操作,将其简化为列表,但我会不惜一切代价尝试避免这种方法

编辑:

目前,最好假设我什么都不知道。不过,要回答以下问题:我可以打开文件并阅读它。如果它是一个一致的CSV格式的文件,我可以编写代码来处理包含的数据,并创建一个使用该数据的类结构。现在我只是前三行和下面的数字有点问题

2012年4月4日:

好的,我有一些代码,我在下面留下了关于它的注释

def getInput():
    global albums
    raw = open("album.txt","r")
    infile = raw
    raw.close
    text=""
    line = infile.readline()
    while (line != "EOF\n" ):
        text += line
        line=infile.readline()
    text=text.rstrip("\n\n")
    albums=[str(n) for n in text.split("\n\n")]
    return albums


class Album():
    def __init__(self, title, artist, date):
        self.title=title
        self.artist=artist
        self.date=date
        self.track={}

    def addSong(self, TrackID, title, time, ranking):
        self.track+={self}

    def getAlbumLength(self):
        asdf=0
    def getRanking(self):
        asdf=0

def labels(x): #establishes labels per item to be used for Album Classifier
    title=""
    artist=""
    date=""

    for i in range(0,len(albums),1):
        sublist=[str(n) for n in albums[i].split("\n")]
        RANDUMB=len(albums[i])
        title=sublist[0]
        artist=sublist[1]
        date=sublist[2]

        for j in range(0,len(sublist),1):                
            song_info = [str(k) for k in sublist[3:].split("," and " - ")]
            TrackID=song_info[0]
            title=song_info[1]
            time=song_info[2]
            ranking=song_info[3]

getInput()
labels(albums)
个人对守则的意见: 我试图避免把它列入清单,因为我预料到了这个问题。就函数而言,我必须使用每一个函数,因为它在任务要求中。。。我很不高兴,因为我可能会到处使用它们。代码已经足够有效了,除了最后一部分,我试图获取歌曲信息。我想将歌曲信息拆分为列表,这些列表嵌套在唱片集信息列表中。比如:

[Album title, Artist, Date released,[01,Song,3:44,2],[02,Song,0:01,9]....]
目前的代码给了我索引超出范围的错误,现在。。。我在用蟒蛇3


TLDR:因此,我的问题的实质已从试图解决如何开始解决方案转变为如何将列表中的项目转换为嵌套列表。

如果您最终编辑了问题,以包含一些更具体的示例,说明给您带来麻烦,我将编辑此答案。但是为了解决你的一般问题,有一些步骤可以帮助你实现目标

  • 正如您所说,您需要编写一个类来反映您希望从这些数据中获得的结构
  • 您可能需要逐行解析此文件。因此,您必须确定此文件格式是否一致。如果是,则需要确定:
  • 每个数据集之间的分隔符是什么,将符合类实例
  • 每行的每个字段之间的分隔符是什么
  • 当您在每一行上循环时,您将知道无论何时遇到空行,您都需要启动一个新的相册对象

    当你知道你要开始一张新专辑时,你可以假设第一行是标题,第二行是艺术家,第三行是年份,等等


    对于这些行中的每一行,您还必须有如何将每一行拆分为所需数据的规则。在基本层面上,它可以是一组简单的拆分。在更高级的级别上,您可以为每种类型的行定义正则表达式。

    也许您可以发布到目前为止的内容?你到底在哪一部分有问题?打开文件进行读取?如何从文件中读取行?如何创建album类?如何给一个类变量赋值?为什么你害怕在列表上拆分\n\n'是目前为止我能看到的唯一可用定界器。如果你不在两条换行线上拆分,你将如何区分一个对象的开始和另一个对象的结束?@jdi谢谢,这就是我要找的。我不想添加太多信息,因为我没有对我所知道的进行假设,因为我可能是错的。我的问题就是我不知道如何分割数据。我假定它是通过.split(“\n\n”)进行的。我想我会在实际的标题/艺术家/年份之前去掉前导文本,但即使这样,我也不知道如何处理。我会提供我的代码,我会向您展示我的代码,但到目前为止我所做的只是读取文件、存储数据并关闭文件。@T\u Poda:您不需要一次读取全部数据。只需一行一行地在上面循环,并在运行过程中更改“状态”。如果你碰到一个空行,你知道你需要做一个新的。如果你最终发布了任何代码,我将对此发表评论。