Как объединить файлы в python 3 - с open() как: НЕ работает

Я пытаюсь объединить содержимое всех файлов .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') нет.

Вы используете относительные пути для папки, отличной от той, в которой вы находитесь. Попробуйте изменить folder = os.listdir("../notes") на folder = [os.path.join("../notes", file) for file in os.listdir("../notes")].

Samwise 31.03.2023 17:37
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
1
61
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Когда вы пытаетесь просмотреть папку, вы получаете только имена файлов, но вы не указываете путь, где хранится файл, поэтому он не работает, поскольку файлы находятся в папке, отличной от корневой папки, у вас есть указать путь к файлу.

Имена файлов, которые вы получаете из 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:

Я рад~ добро пожаловать

Simran Farrukh 01.04.2023 17:16

Другие вопросы по теме