#python #loops #os.path
#python #циклы #os.path
Вопрос:
У меня возникли трудности с небольшим количеством кода, предназначенного для записи даты «Последнего изменения» ряда файлов в документ CSV.
У меня все остальное работает должным образом, однако эта функция возвращает:
FileNotFoundError: [WinError 2] The system cannot find the file specified: 'filenamesoandso.docx'
Вот контекст:
pathList = ["S:\BUILDING\",
"S:\ONGOING PROJECTSFACILITY OPERATIONSOPERATIONS\"
]
def file_date_modified(pathList):
sys.stdout = open("date modified.txt", "w ")
for root, dirs, files, in os.walk(a):
for file in files:
if file.endswith(".pdf"):
print(time.ctime(os.path.getmtime(file)))
if file.endswith(".pptx"):
print(time.ctime(os.path.getmtime(file)))
if file.endswith(".doc"):
print(time.ctime(os.path.getmtime(file)))
if file.endswith(".docx"):
print(time.ctime(os.path.getmtime(file)))
if file.endswith(".xlsx"):
print(time.ctime(os.path.getmtime(file)))
for a in pathList:
file_date_modified()
Я понимаю, что эта ошибка обычно предполагает, что она ищет не в том каталоге, но не смогла найти исправление, основанное на ответах на другие вопросы здесь. Вот пример другой функции, которую я использовал, которая работает правильно, и я не уверен, почему эта определяет правильный путь, а первая — нет.
def file_name_print(pathList):
sys.stdout = open("file names.txt", "w ")
for root, dirs, files in os.walk(a):
for file in files:
if file.endswith(".pdf"):
print(os.path.splitext(file)[0])
if file.endswith(".pptx"):
print(os.path.splitext(file)[0])
if file.endswith(".doc"):
print(os.path.splitext(file)[0])
if file.endswith(".docx"):
print(os.path.splitext(file)[0])
if file.endswith(".xlsx"):
print(os.path.splitext(file)[0])
Я все еще новичок, поэтому, возможно, я упускаю из виду что-то глупое.
Ответ №1:
Вероятно, вам нужно добавить каталог к имени файла, поскольку каталог файла отличается от текущего рабочего каталога скрипта, как кажется.
Способ сделать это может быть:
for file in files:
file_path = os.path.join(root, file)
if file.endswith(".pdf"):
print(time.ctime(os.path.getmtime(file_path)))
Это работает для вас?
Комментарии:
1. Случайно нажал «enter» в ответе, прежде чем это было сделано.
2. Упс, случайно нажал «enter» в ответе, прежде чем это было сделано. Ошибка изменилась на WinError 3, и я вижу, что это может быть связано с количеством обратных косых черт / escape-символов, которые генерирует программа: {Ошибка FileNotFoundError: [Ошибка WinError 3] Система не может найти указанный путь: ‘S:\ONGOING ПРОЕКТЫ \ ОПЕРАЦИИ ОБЪЕКТА \ ТЕКУЩИЕ \}
3. Возможно, удалите все косые и обратные черты и используйте
os.path.join('S:', 'BUILDING')
вместо этого4. Да, похоже, проблема в обратных косых чертах и в том, как программа их анализирует. Но, похоже, ваше решение устранило мою проблему. Спасибо!