Gå til innhold

Anbefalte innlegg

Skrevet

Hei. Jeg holder på å skrive et skript som finner alle mine mp3-filer og gjør om informasjonen til HTML og skriver denne til en fil.

 

#!/usr/bin/python
# -*- coding: UTF-8 -*-
# Filename: htmllib.py


# Importing modules
import os


# Setting start of the HTML document
start = '''<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd">
<HTML>
<HEAD>
<TITLE>HTML Library</TITLE>
</HEAD>
<BODY BGCOLOR=#FFFFFF>
<TABLE>'''


# Setting main of the HTML document
main = '\n'


# Setting end of the HTML document
end = '''</TABLE>
</BODY>
</HTML>'''


# Finds all .mp3-files in searchdir
searchdir = '/Users/oleb/Music/iTunes'
musicdir = (os.listdir(searchdir))
for artist in musicdir:
if '.' in artist:
 pass
else:
 artistfolder = '/Users/oleb/Music/iTunes/' + artist
 try:
 	artistdir = os.listdir(artistfolder)
 except OSError:
 	pass
 for album in artistdir:
 	if '.' in album:
   pass
 	else:
   albumfolder = '/Users/oleb/Music/iTunes/' + artist + os.sep + album
   try:
   	albumdir = os.listdir(albumfolder)
   except OSError:
   	pass
   for file in albumdir: 
   	if '.mp3' in file:
     fileloc = albumfolder + os.sep + file
     #print fileloc
     add2link = fileloc[12:]
     filename = os.path.split(add2link)[1]
     folderraw = os.path.split(add2link)[0][13:]
     folderbetter = folderraw.replace('/', ' - ')
     main = main + '''<TR><TD>%s: </TD><TD><A HREF="../../%s">%s</A></TD></TR>\n''' % (folder, add2link, filename)
   	else:
     pass

     
# Adds together the various HTML parts and writes them to a file
html = start + main + end

# Writes the html to the file index.html
f = file('index.html', 'w')
f.write(html)
f.close()

 

Koden fungerer fint til # Writes the html to the file index.html

 

Jeg får følgende error.

Traceback (most recent call last):
 File "htmllib.py", line 70, in ?
   f = file('index.html', 'w')
TypeError: 'str' object is not callable

 

Jeg har prøvd å la det skrive test = 'gibberish' isteden, men allikevel får jeg samme error. Jeg kan printe html og den er helt perfekt. Hvis jeg fjerner hele avsnittet # Finds all .mp3-files in searchdir fungerer det fint.

 

Jeg lurer dermed på hvorfor dette ikke fungerer, og hva jeg kan gjøre for å fikse det?

Videoannonse
Annonse
Skrevet (endret)

file er en funksjon til å åpne filer, men du kan overskrive den ved å kjøre file = noeannet. Noe liknende gjør du i loopen din:

  for file in albumdir:

Du må altså skifte file her til noe annet, eventuelt kan du bruke synonymet open. En siste (og ikke foretrukket måte) er å importere __builtin__ og kalle __builtin__.file

 

edit:

Forøvrig kan du sjekke om variabel X slutter på eller begynner på noe ved bruk av dette (dersom X er string):

if X.endswith('.mp3'):
 #slutter på .mp3
 pass
if X.startswith('TeamLudvigsen'):
 #begynner på 'TeamLudvigsen'
 pass

Endret av dabear
Skrevet

Tusen takk for hurtig og godt svar!

 

Jeg var vel egentlig klar over startswith, så burde tenkt meg til endswith selv.

 

Er min fremgangsmåte for å finne filer i en mappe "vanlig"?

Skrevet (endret)

Tja, så lenge du lærer på det ;)

Jeg ville kanskje brukt os.walk, os.path.basename, os.path.join og deretter separere html fra python, ved å lage alle nødvendige lister og deretter kjøre en for-loop, list-comprehension eller filter()

 

I tillegg kan os.path.expanduser være å foretrekke.

 

NB! finn en bedre editor, og bruk 4 mellomrom til indentering! Koden din ser ikke ut her på linuxboksen min :p

 

Om du bruker tekst-editoren innebygd i OS X, er jeg sikker på at denne òg kan stilles inn ;)

Endret av dabear
Skrevet

Ok. Regner med jeg kan bruke mer avanserte os-funksjoner etterhvert.

 

Angåedne teksteditoren, så skal den være grei den, men er mulig jeg har stilt den litt feil. Jeg bruker tab til indentering. Har forandret noen instillinger nå -- ser dette bedre ut?

 

if x != 0:
   if y > x:
       if z > x:
           print x, y, z, 

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...