如何在python 3 - with open()中合并文件:不工作[重复]

u0njafvf  于 2023-04-08  发布在  Python
关注(0)|答案(3)|浏览(139)

此问题已在此处有答案

Python raising FileNotFoundError for file name returned by os.listdir(3个答案)
7天前关闭
我试图将所有.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()

我一直得到这个错误:
文件未找到错误:[错误2]没有这样的文件或目录:'文件日期Mar 30 2023,4 30 48 PM.txt'
然而,文件名 is 保存在列表files_names中,这意味着for循环 * 确实 * 在“notes”目录中找到了文件。我不明白为什么with open(file, 'r')没有。

jw5wzhpr

jw5wzhpr1#

open()函数需要一个文件路径,但在代码中,file只是文件名,没有文件所在目录的路径。
在print(file_names)后面添加以下行:
file_path = os.path.join("../notes", file)
并将open()函数改为file_path:
with open(file_path, "r") as infile:

5anewei6

5anewei62#

当你试图通过文件夹循环你只得到文件名,但你不提供文件存储的路径,这就是为什么它不工作的文件是在一个不同的文件夹比根文件夹,你必须给予文件路径。

atmip9wb

atmip9wb3#

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

相关问题