Я искал вокруг, и мне не повезло найти что-нибудь, отвечающее на мой вопрос.
По сути, у меня есть файл со следующими данными:
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" через Google, и я не мог понять, как применить решение к моему делу.
И да, это для школьного задания. Я немного покопался и нашел кое-что актуальное, но я просто не понимаю этого. Я новичок в программировании в целом, и я добился прогресса, но это, кажется, слишком далеко над моей головой.
Я знаю, что мог бы сократить это до списков, используя split (\ n \ n) и работая с последовательными постепенно уменьшающимися списками, но я пытаюсь избежать этого метода любой ценой.
EDIT:
Пока лучше предположить, что я ничего не знаю. Хотя, чтобы ответить на вопрос ниже: я могу открыть файл и прочитать его. Если это согласованный файл в формате CSV, я могу написать код для обработки вложенных данных и создать структуру класса, которая использует эти данные. Прямо сейчас у меня проблемы с первыми тремя строками и цифрами сразу ниже.
4 апреля 2012 г .:
Хорошо, у меня есть некоторый код, я оставил комментарии по этому поводу внизу.
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]....]
Текущий код дает мне ошибку индекса вне диапазона на данный момент ... Я использую python3.
TLDR. Таким образом, суть моей проблемы изменилась: попытка решить, как приступить к решению проблемы, - как взять элементы в списке и преобразовать их во вложенные списки.