Я пытаюсь объединить содержимое всех файлов .txt в каталоге на один уровень выше каталога, в котором хранится файл .py ниже.
import os
def main():
# Get list of files stored in a dir above this .py's dir
folder = os.listdir("../notes")
# Merge the files
merge_files(folder)
def merge_files(folder):
# Create a list to store the names of the files
files_names = []
# Open output file in append mode
with open("merged_notes.txt", "a") as outfile:
# Iterate through the list of files
for file in folder:
# Add name of file to list
files_names.append(file)
print(files_names)
# Open input file in read mode
with open(file, "r") as infile:
# Read data from input file
data = infile.read()
# Write data to output file (file name, data, new line)
outfile.write(file)
outfile.write(data)
outfile.write("\n")
# Return merged file
return "merged_notes.txt"
if __name__ == "__main__":
main()
Я продолжаю получать эту ошибку:
FileNotFoundError: [Errno 2] Нет такого файла или каталога: «Файл bard 30 марта 2023 г., 4 30 48 PM.txt»
Однако имя файла сохраняется в списке files_names
, что означает, что цикл for находит файл в каталоге «notes». Я не понимаю, почему with open(file, 'r')
нет.
Когда вы пытаетесь просмотреть папку, вы получаете только имена файлов, но вы не указываете путь, где хранится файл, поэтому он не работает, поскольку файлы находятся в папке, отличной от корневой папки, у вас есть указать путь к файлу.
Имена файлов, которые вы получаете из os.listdir("../notes")
, относятся к каталогу ../notes
, а не к текущему каталогу. Перед именем файла необходимо указать правильный путь.
Попробуйте использовать pathlib
, что дает вам больше автоматических вещей:
from pathlib import Path
notes = Pathlib("../notes").iterdir()
for note in notes:
with open(note) as f:
data = f.read()
print(data) # contents of the file
Функция open() ожидает путь к файлу, но файл в вашем коде — это просто имя файла без пути к каталогу, в котором находится файл.
Добавьте следующую строку сразу после print(file_names):
file_path = os.path.join("../notes", file)
И измените функцию open(), чтобы она принимала file_path:
with open(file_path, "r") as infile:
Я рад~ добро пожаловать
Вы используете относительные пути для папки, отличной от той, в которой вы находитесь. Попробуйте изменить
folder = os.listdir("../notes")
наfolder = [os.path.join("../notes", file) for file in os.listdir("../notes")]
.