Я пытаюсь создать программу, которая просматривает список файлов .txt и добавляет их имена и содержимое в словарь. Программа правильно перемещается по папке, и я даже могу распечатать имена файлов в папке. Однако, когда я пытаюсь добавить имя файла и содержимое в словарь, я получаю эту ошибку в консоли,
Traceback (most recent call last):
File "test.py", line 33, in <module>
user1.append_journal_files(location)
File "test.py", line 21, in append_journal_files
with open(filename, 'r') as file_object:
FileNotFoundError: [Errno 2] No such file or directory: 'dump.0001.txt'
Я не уверен, почему файлы не распознаются как существующие, когда я пытаюсь ими манипулировать. Заранее благодарим вас за то, что нашли время взглянуть на это. Пожалуйста, дайте мне знать, если что-то нужно уточнить. Я новичок в программировании и хочу убедиться, что хорошо общаюсь. Еще раз спасибо.
#Python Version 3.6.5
#imports
import os
#classes
class User():
#Class that models a Revit user
def __init__(self, username):
'''initializes the class with a username, additional info
gathered after initialization'''
self.username = username
self.title = ""
self.journal_log = {}
def append_journal_files(self, directory_in_str):
#appends all items of filetype in folder to dictionary instance.
directory = os.fsencode(directory_in_str)
for file in os.listdir(directory):
filename = os.fsdecode(file)
if filename.endswith(".txt"):
with open(filename, 'r') as file_object:
if filename not in self.journal_log.keys():
self.journal_log[filename] = file_object.readlines()
else:
continue
continue
else:
continue
#begin running program
user1 = User("Christian")
location = 'C:\\Users\Christian Gentry\AppData\Local\Autodesk\Revit\Autodesk Revit 2018\Journals'
user1.append_journal_files(location)






filename - это просто базовое имя, как и dump.0001.txt.
Если вы хотите открыть файл, вам нужен полный путь, например C:\Users\Christian Gentry\AppData\Local\Autodesk\Revit\Autodesk Revit 2018\Journals\dump0001.txt. (Это также может быть относительный путь от текущего рабочего каталога, но он должен быть путем, который приведет вас к файлу.)
Вы уже делаете это для listdir - вы не просто проходите мимо Journals и ожидаете, что это сработает, - и здесь та же идея.
Самое простое решение:
pathname = os.path.join(directory, filename)
with open(pathname, 'r') as file_object:
Пока мы на этом:
fsencode, чтобы передать listdir, а к fsdecode - результаты, которые вы получите обратно. Если вы просто передадите строку, Python автоматически закодирует их соответствующим образом и автоматически декодирует результаты за вас.pathlib вместо os; его немного легче понять новичкам, в нем намного легче ориентироваться, и он затрудняет выполнение множества мелких ошибок. До версии 3.6 его нельзя было использовать с большими фрагментами stdlib, но вы используете 3.6, так что это не имеет значения.Привет, спасибо большое @abarnert! Я не понимал, что путь должен быть присоединен к имени файла. Единственное изменение, которое мне пришлось внести в ваше решение, было вместо pathname = os.path.join (каталог, имя файла), мне пришлось ввести pathname = os.path.join (directory_in_str, filename). Это решило мою проблему!
Вы пропустили директорию в пути при открытии файла.