J'ai écrit un script en python pour extraire les cinq premiers titres de différents articles d'une page Web, puis écrire les titres dans des fichiers texte individuels et les mettre dans cinq sous-dossiers différents dans un dossier de bureau Actuellement, mon script suivant peut analyser les titres de cinq articles et les écrire dans cinq fichiers texte différents et les placer dans un dossier de bureau Comment puis-je créer cinq sous-dossiers différents dans un dossier principal et y placer les fichiers texte concernant les sous-dossiers? Voici ma tentative jusqu'à présent: DataStorage code >.
DataStorage
.
3 Réponses :
ne jamais utiliser os.chdir
si vous pouvez l'éviter, ce qui est: la plupart du temps / toujours .
Plus vous empêche de comprendre la logique des chemins de fichiers hors du répertoire courant.
Préférez utiliser le chemin absolu sur les fichiers que vous lisez / écrivez.
Alors supprimez
subdir = os.path.join(dirf,item) if os.path.exists(subdir): os.mkdir(subdir) # create first time with open(os.path.join(subdir,filename+'.txt'),'w', encoding='utf-8') as f: f.write(item.text)
modifiez maintenant ceci:
with open(filename+'.txt','w', encoding='utf-8') as filename:
par
os.chdir(dirf)
où élément est le chemin relatif de votre sous-répertoire (il doit se conformer aux règles actuelles du système de fichiers, ce qui n'est pas garanti à 100% car il provient d'un fichier html). Notez également que vous ne devez pas réutiliser
filename
pour le handle de fichier. J'utilise généralement f
ou filehandle
Ce qui suit pourrait fonctionner
import os import requests from bs4 import BeautifulSoup url = "https://stackoverflow.com/questions/tagged/web-scraping" dirf = r"C:\Users\WCS\Desktop\DataStorage" # The main folder in desktop if not os.path.exists(dirf): os.makedirs(dirf) os.chdir(dirf) res = requests.get(url) soup = BeautifulSoup(res.text, "lxml") for item in soup.select(".summary .question-hyperlink")[:5]: filename = item.text.split(" ")[0] curr_dir = os.path.join(dirf, filename) os.makedirs(curr_dir) filepath = os.path.join(curr_dir, filename+'.txt') with open(filepath, 'w', encoding='utf-8') as f: f.write(item.text)
Pour créer un répertoire, vous pouvez utiliser os.mkdir (PATH)
. Pour créer le fichier, vous pouvez ouvrir
le fichier avec l'autorisation w +
qui créera le fichier s'il n'existe pas et réécrira également le fichier s'il existe.