在当前和子目录中的每个Python文件的顶部添加行

时间:2011-08-12 12:04:06

标签: python linux perl shell

我在Ubuntu平台上,并且有一个包含许多.py文件和子目录(也包含.py文件)的目录。我想在每个.py文件的顶部添加一行文本。使用Perl,Python或shell脚本最简单的方法是什么?

6 个答案:

答案 0 :(得分:6)

find . -name \*.py | xargs sed -i '1a Line of text here'

编辑:从tchrist的评论中,用空格处理文件名。

假设您有GNU find和xargs(正如您在问题上指定了linux标记)

find . -name \*.py -print0 | xargs -0 sed -i '1a Line of text here'

如果没有GNU工具,您可以执行以下操作:

while IFS= read -r filename; do
  { echo "new line"; cat "$filename"; } > tmpfile && mv tmpfile "$filename"
done < <(find . -name \*.py -print)

答案 1 :(得分:5)

for a in `find . -name '*.py'` ; do cp "$a" "$a.cp" ; echo "Added line" > "$a" ; cat "$a.cp" >> "$a" ; rm "$a.cp" ; done

答案 2 :(得分:4)

import os
for root, dirs, files in os.walk(directory):
    for file in files:
        if file.endswith('.py')
            file_ptr = open(file, 'r')
            old_content = file_ptr.read()
            file_ptr = open(file, 'w')
            file_ptr.write(your_new_line)
            file_ptr.write(old_content)

据我所知,你不能在python中插入文件的开头或结尾。只能重写或追加。

答案 3 :(得分:4)

    #!/usr/bin/perl

    use Tie::File;
    for (@ARGV) {
        tie my @array, 'Tie::File', $_ or die $!; 
        unshift @array, "A new line";        
    }

要处理目录中的所有.py个文件,请在shell中以递归方式运行此命令:

find . -name '*.py' | xargs perl script.pl

答案 4 :(得分:4)

这将

  1. 以当前工作开始递归遍历所有目录 目录
  2. 仅修改文件名以“.py”
  3. 结尾的文件
  4. 保留文件权限(与...不同) open(filename,'w')。)
  5. fileinput还允许您在修改原始文件之前备份它们。


    import fileinput
    import os
    import sys
    
    for root, dirs, files in os.walk('.'):
        for line in fileinput.input(
                (os.path.join(root,name) for name in files if name.endswith('.py')),
                inplace=True,
                # backup='.bak' # uncomment this if you want backups
                ):
            if fileinput.isfirstline():
                sys.stdout.write('Add line\n{l}'.format(l=line))
            else:
                sys.stdout.write(line)
    

答案 5 :(得分:1)

  

使用Perl,Python或shell脚本最简单的方法是什么?

我使用Perl,但那是因为我比Perc知道Perl要好得多。哎呀,也许我会用Python做这件事只是为了更好地学习它。

最简单的 方式是使用您熟悉并可以使用的语言。而且,这也可能是最好的方式。

如果这些都是Python脚本,我认为它可以让你了解Python,或者可以访问一群了解Python的人。所以,你最好用Python做这个项目。

但是,也可以使用 shell脚本,如果你知道shell最好,那就是我的客人。这是一个完全未经测试的shell脚本,就在我的脑海中:

find . -type f -name "*.py" | while read file
do
    sed 'i\
I want to insert this line
' $file > $file.temp
  mv $file.temp $file
done