2015-03-12 7 views
7

Lassen Sie mich dies vorausschicken, indem ich sage, dass ich nicht genau bin sicher, was mit meinem Code geschieht; Ich bin ziemlich neu im Programmieren.Wie entkomme ich Schrägstriche in Python, so dass open() sieht meine Datei als Dateiname zu schreiben, anstatt einen Dateipfad zu lesen?

Ich habe an der Erstellung eines individuellen Abschlussprojekts für meine Python CS-Klasse gearbeitet, die täglich die Website meines Lehrers überprüft und feststellt, ob er seit dem letzten Ausführen des Programms eine der Webseiten auf seiner Website geändert hat nicht.

Der Schritt arbeite ich jetzt an ist wie folgt:

def write_pages_files(): 
    ''' 
    Writes the various page files from the website's links 
    ''' 
    links = get_site_links() 
    for page in links: 
     site_page = requests.get(root_url + page) 
     soup = BeautifulSoup(site_page.text) 
     with open(page + ".txt", mode='wt', encoding='utf-8') as out_file: 
      out_file.write(str(soup)) 

Die Links sehen wie folgt aus:

/site/Site-Name/Klasse/Abschluss-Code

Und die Fehler die ich erhalte, wie folgt:

with open(page + ".txt", mode='wt', encoding='utf-8') as out_file: 
FileNotFoundError: [Errno 2] No such file or directory: '/site/sitename/class.txt' 

Wie kann ich die Seiten mit diesen Namen (/site/sitename/nameofpage.txt) schreiben?

page.replace("/",".") + ".txt" 

Python setzt /site etc .. ist ein Verzeichnis:

+2

Sie können '/' in der Datei Basisname nicht haben, können Sie ersetzen '/' mit '.' –

+0

Vielen Dank! Das beantwortet meine Frage vollständig. Können Sie mir sagen, welchen Zweck der Ausschluss von Schrägstrichen hat? Gibt es einen Zweck? –

+1

'/' wird für Verzeichnisse verwendet, so dass '/ site' usw. als Verzeichnis behandelt wird, das den angezeigten Fehler verursacht, da'/site/sitename/'kein Verzeichnis ist –

Antwort

4

Sie / in der Datei auf Basisnamen UNIX- oder Windows-nicht haben, können Sie / mit . ersetzen könnte.

+0

Es funktioniert! Aber ich musste daran denken, dass Dateien mit einem Punkt (".") Auf Unix versteckt werden. –

+1

Sie können '_' stattdessen verwenden, wenn Sie'/'vorangestellt haben –

2

Unter Unix/Mac OS, für die mittleren Schrägstriche, können Sie : verwenden, die zu / konvertieren, wenn angesehen, aber die Unterordner auslösen, die / tut.

site/sitename/class/final-code ->final-code Datei in einem class Ordner in einem sitename Ordner in einem site Ordner im aktuellen Ordner site:sitename:class:final-code ->site/sitename/class/final-code Datei im aktuellen Ordner.

0

Bezogen auf den Titel der Frage, wenn auch nicht die Besonderheiten, wenn Sie wirklich Ihre Dateinamen wollen etwas enthalten, das wie ein Schrägstrich aussieht, können Sie das Unicode-Zeichen „/“ (DIVISION SLASH) verwenden, auch bekannt als u'\u2215' .

Dies ist in den meisten Fällen nicht sinnvoll (und könnte verwirrend sein), kann aber nützlich sein, wenn die Standardnomenklatur für ein Konzept, das Sie in einen Dateinamen aufnehmen möchten, Schrägstriche enthält.