Я не могу создать несуществующий файл и записать его в режиме w

#python #windows #web-scraping #scrapy #operating-system

Вопрос:

Я пытаюсь создать папку и записать в нее файлы, даже если изначально папки не существует, но я получаю FileNotFoundError: [Errno 2] Нет такого файла или каталога.

Я считаю, что использование режима w должно создавать файл, независимо от того, существует он или нет, а затем записывать в него, но он, похоже, не работает, и я продолжаю получать файлообменник. Я также пытался использовать a или r , но, похоже, ничего не работает.

журнал ошибок:

 FileNotFoundError: [Errno 2] No such file or directory: 'C:\Users\Habib\Documents\Upwork_Projects\Stephanie-web-scraping\ufccrawler\fighter\fighters-n.json'  

ufcscraper.py:

 page = response.url.split("amp;")[0][-1] # a sample of the page url structure is: http://ufcstats.com/statistics/fighters?char=aamp;page=all filename = f'fighters-{page}.json'  path = os.getcwd() # 'C:\Users\Habib\Documents\Upwork_Projects\Stephanie-web-scraping\ufccrawler\ufccrawler\spiders' new_path = path.split("\")[0:-2] # ['C:', 'Users', 'Habib', 'Documents', 'Upwork_Projects', 'Stephanie-web-scraping', 'ufccrawler'] new_path = ("\").join(new_path)   "\fighter" # 'C:\Users\Habib\Documents\Upwork_Projects\Stephanie-web-scraping\ufccrawler\fighter' completeName = os.path.join(new_path, filename) # 'C:\Users\Habib\Documents\Upwork_Projects\Stephanie-web-scraping\ufccrawler\fighter\fighters-a.json'  with open(completeName, 'w ') as f:  f.write(json.dumps(results, indent=2))  f.close() self.log(f'Saved file {completeName}')  

Комментарии:

1. О чем fighter ? Существует ли она?

2. его не существует, поэтому я использовал режим w , чтобы python мог создать его сам и записать в него файлы.

3. Ждать. filter это каталог. w открывает файл для чтения и записи. Если он не существует, он создаст файл . Но он не может создать каталог, если он не существует в пути.

4. Я думаю, что понял это, используя «os.makedirs()» хорошо работает.

5. именно то, что я сделал, проверьте в разделе ответов.

Ответ №1:

 page = response.url.split("amp;")[0][-1] # a sample of the page url structure is: http://ufcstats.com/statistics/fighters?char=aamp;page=all filename = f'fighters-{page}.json'  path = os.getcwd() # 'C:\Users\Habib\Documents\Upwork_Projects\Stephanie-web-scraping\ufccrawler\ufccrawler\spiders' new_path = path.split("\")[0:-2] # ['C:', 'Users', 'Habib', 'Documents', 'Upwork_Projects', 'Stephanie-web-scraping', 'ufccrawler'] new_path = ("\").join(new_path)   "\fighter" # 'C:\Users\Habib\Documents\Upwork_Projects\Stephanie-web-scraping\ufccrawler\fighter'  # This fixes the issue for me by checking to see if the directory exist or not and the creates it if it doesn't exist if not os.path.exists(new_path):  os.makedirs(new_path)  completeName = os.path.join(new_path, filename) # 'C:\Users\Habib\Documents\Upwork_Projects\Stephanie-web-scraping\ufccrawler\fighter\fighters-a.json'  with open(completeName, 'w ') as f:  f.write(json.dumps(results, indent=2))  f.close() self.log(f'Saved file {completeName}')