You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python 3中使用with open()合并上级目录txt文件时遭遇FileNotFoundError问题求助

Python 3中使用with open()合并上级目录txt文件时遭遇FileNotFoundError问题求助

嘿,我太懂你这种明明文件名都列出来了,却打不开文件的困惑了!问题的核心其实很简单——你拿到的只是文件名,没有告诉Python文件所在的完整路径。

你用os.listdir("../notes")获取的是notes目录下的纯文件名,比如'File bard Mar 30 2023, 4 30 48 PM.txt',但当你直接调用open(file, 'r')时,Python会默认在当前脚本所在的目录下去找这个文件,而不是去上级的notes目录里找,这就导致了FileNotFoundError。

下面给你两种实用的解决办法:

方法一:拼接完整文件路径(推荐)

最稳妥的方式是把上级目录的路径和文件名拼接成完整路径,这样Python就能精准定位到文件了。我们可以用os.path.join()来做这件事,它会自动适配不同操作系统的路径分隔符,避免手动拼接出错。

修改后的完整代码如下:

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 = []
    # 定义上级notes目录的相对路径
    notes_directory = "../notes"
    # 用w模式每次生成全新合并文件,a模式为追加模式
    with open("merged_notes.txt", "w") 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)
            # 拼接完整的文件路径
            full_file_path = os.path.join(notes_directory, file)
            # Open input file in read mode
            with open(full_file_path, "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()

方法二:临时切换工作目录(可选)

你也可以先让Python切换到../notes目录下再操作文件,但这种方法需要注意操作完切回原目录,否则后续的文件操作可能会受影响:

import os

def main():
    folder = os.listdir("../notes")
    merge_files(folder)

def merge_files(folder):
    files_names = []
    # 保存当前工作目录
    original_dir = os.getcwd()
    # 切换到上级notes目录
    os.chdir("../notes")
    # 要写入的合并文件需要用原目录的路径,否则会生成在notes目录下
    with open(os.path.join(original_dir, "merged_notes.txt"), "w") as outfile:
        for file in folder:
            files_names.append(file)
            print(files_names)
            with open(file, "r") as infile:
                data = infile.read()
                outfile.write(file)
                outfile.write(data)
                outfile.write("\n")
    # 切回原来的工作目录
    os.chdir(original_dir)
    return "merged_notes.txt"

if __name__ == "__main__":
    main()

最后提个小细节:你原来用的是open("merged_notes.txt", "a")(追加模式),如果多次运行脚本,合并内容会不断叠加。要是你希望每次运行都生成全新的合并文件,建议改成"w"(写入模式),这样每次都会覆盖之前的内容。

备注:内容来源于stack exchange,提问作者Lele

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 10:52:40