2015-03-12 4 views
7

Lasciatemi prefigurare ciò dicendo che sono non esattamente sicuro di cosa sta accadendo con il mio codice; Sono abbastanza nuovo alla programmazione.Come faccio a sfuggire alle barre in avanti in python, in modo che open() veda il mio file come un nome file da scrivere, invece che un percorso file da leggere?

Ho lavorato alla creazione di un singolo progetto finale per la mia classe Python CS che controlla il sito web del mio insegnante su base giornaliera e determina se ha cambiato una qualsiasi delle pagine web sul suo sito Web dall'ultima volta che il programma è stato eseguito o non.

Il passo su cui sto lavorando in questo momento è la seguente:

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)) 

I collegamenti sono simili a questo:

/site/sitename/classe/final-codice

E l'errore che ottengo è il seguente:

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

Come posso scrivere le pagine del sito con questi tipi di nomi (/site/sitename/nameofpage.txt)?

+2

non è possibile avere '/' nel nome file del file, è possibile sostituire '/' con '.' –

+0

Grazie! Questo risponde totalmente alla mia domanda. Puoi dirmi quale sia lo scopo di escludere le barre in avanti? C'è uno scopo? –

+1

'/' è usato per le directory così '/ site' ecc. È trattato come una directory che fa sì che l'errore che vedi come/site/sitename /' non sia una directory –

risposta

4

non si può avere / nel file basename su UNIX o Windows, è possibile sostituire con /.:

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

Python presume /site ecc .. è una directory.

+0

Funziona! Ma dovevo ricordare che i file preceduti da un punto (".") Saranno nascosti su Unix. –

+1

Puoi usare '_' invece se hai il comando'/' –

2

Su Unix/Mac OS, per le barre medie, è possibile utilizzare : che verrà convertito in / quando visualizzato, ma attivare le sottocartelle che fa /.

site/sitename/class/final-code ->final-code file in una cartella in una cartella classsitename in una cartella site nella cartella corrente site:sitename:class:final-code ->site/sitename/class/final-code file nella cartella corrente.

0

correlati al titolo della questione, anche se non le specifiche, se si davvero desidera che i nomi di file da includere qualcosa che assomiglia a una barra, è possibile utilizzare il carattere unicode "/" (DIVISION SLASH), alias u'\u2215' .

Questo non è utile nella maggior parte dei casi (e potrebbe essere fonte di confusione), ma può essere utile quando la nomenclatura standard per un concetto che si desidera includere in un nome file include barre.

Problemi correlati