在文件夹的每个文件中的每一行之后写入字符串

时间:2016-05-23 10:36:53

标签: python

我是Python的新手,想要在根文件夹中的所有文件的每一行(仅在指定的文件扩展名中)和所有带有Python脚本的子文件夹之后添加文本行。 我从互联网上收集的内容:

import os
import fnmatch

for root, dirs, files in os.walk("dir"):
    for filename in files:
        if filename.endswith(".x",".y"):
            with open(filename, "r") as f:
                file_lines = [''.join([x.strip(), "some_string", '\n']) for x in f.readlines()]
            with open(filename, "w") as f:
                f.writelines(file_lines) 

我用一个小文件夹测试了它,但得到错误: IOError:[Errno 2]没有这样的文件或目录

3 个答案:

答案 0 :(得分:0)

append模式打开文件。

代码 -

import os


def foo(root, desired_extensions, text_line):
    for subdir, dirs, files in os.walk(root):
        for f in files:
            file_path = os.path.join(subdir, f)
            file_extension = os.path.splitext(file_path)[1]
            if file_extension in desired_extensions:
                with open(file_path, 'a') as f:
                    f.write(text_line + '\n')


if __name__ == '__main__':
    foo('/a/b/c/d', {'.txt', '.cpp'}, 'blahblahblah')

答案 1 :(得分:0)

问题是您尝试仅通过其名称访问文件 - 忽略其位置的路径。 您需要使用完整路径来访问该文件:os.path.join(root,filename)

答案 2 :(得分:0)

filename不包含路径。您需要加入rootfilename来自行创建完整路径。我建议如下:

for path, _, files in os.walk("dir"):
    for filename in files:
        if os.path.splitext(filename)[1] in ("x", "y"):
            with open(os.path.join(path, filename)) as file:
                file_lines = ...
            ...