我想创建一个脚本,将多行文本作为标题放在多个带txt
扩展名的文件中。但要插入的文本还包括要插入的文件的名称。
以下是要插入的文本:
abcdgd FILENAME dhsgabc
shcnwk shfgamvk
cjshjg nwdcbi
skfh
nwvjcnd
skfh dvwuv
fshvur
egfbt hethtn nhnh
gdngng dehdnnrty
我有许多文件,文件名为 001.txt、002.txt、003.txt 等等。NAMEFILE
只需要 001、002、003 等等(不带.txt
扩展名)。
答案1
您应该能够使用一个简单的 shell 循环来处理此处文档。例如,给定以下形式的001.txt
文件005.txt
$ cat 003.txt
=== START OF ORIGINAL FILE 003 ===
stuff
more stuff
even more stuff
然后
for i in {001..005}; do cat - "$i.txt" <<EOF >tmpfile
+++ HEADER $i +++
new stuff
more new stuff
EOF
mv tmpfile "$i.txt"
done
生成以下格式的文件
$ cat 003.txt
+++ HEADER 003 +++
new stuff
more new stuff
=== START OF ORIGINAL FILE 003 ===
stuff
more stuff
even more stuff
等等。
答案2
下面的脚本以递归方式完成该工作。
完全使用您的示例文本:
#!/usr/bin/env python3
import os
import sys
dr = sys.argv[1]
def addlines(file):
"""
the list below contains the lines, to be added at the top. The lines will
appear in separate lines. In case you want to add an extra line break, use
\n like in the last two lines in the example- content below.
"""
return [
"abcdgd "+file.replace(".txt", "")+" dhsgabc",
"shcnwk shfgamvk",
"cjshjg nwdcbi",
"skfh",
"nwvjcnd",
"skfh dvwuv",
"fshvur",
"\negfbt hethtn nhnh",
"\ngdngng dehdnnrty",
]
for root, dirs, files in os.walk(dr):
for file in files:
path = root+"/"+file
# first read the file and edit its content
with open(path) as new:
text = ("\n").join(addlines(file))+"\n"+new.read()
# then write the edited text to the file
with open(path, "wt") as out:
out.write(text)
它更改了一个名为的文件:
Liesje leerde Lotje lopen.txt
内容:
aap
noot
进入:
abcdgd Liesje leerde Lotje lopen dhsgabc
shcnwk shfgamvk
cjshjg nwdcbi
skfh
nwvjcnd
skfh dvwuv
fshvur
egfbt hethtn nhnh
gdngng dehdnnrty
aap
noot
如何使用
- 将脚本复制到一个空文件中,另存为
change_file
- 在功能中更改
addlines(file)
文本(但不要触摸+file.replace(".txt", "")+
。\n
代表额外的换行符。 使用目标目录作为参数(包含文件的目录)运行它:
python3 /path/to/change_file /directory
如果
/directory
包含空格,请使用引号:python3 /path/to/change_file '/directory'
笔记
如果文件确实巨大的,我们可能需要稍微优化一下流程,每行方法,但在一般情况下,这应该可以正常工作。