我想实现一个文件读取器(文件夹和子文件夹)脚本,它检测一些标签并从文件中删除这些标签。
这些文件是 .cpp、.h、.txt 和 .xml,它们在同一个文件夹下有数百个文件。
我对 python 一无所知,但人们告诉我我可以轻松做到。
示例:
我的主文件夹是A:C:\A
在 A 中,我有文件夹 (B、C、D) 和一些文件 A.cpp A.h A.txt 和 A.xml。在 B 中,我有文件夹 B1、B2、B3,其中一些有更多子文件夹,以及文件 .cpp、.xml 和 .h....
xml 文件,包含一些标签,如
<!-- $Mytag: some text$ -->
.h 和 .cpp 文件包含另一种标签,如
//$TAG some text$
.txt 有不同的格式标签:
#$This is my tag$
它总是以 $ 符号开始和结束,但它总是有一个注释字符 (//,
想法是运行一个脚本并删除所有文件中的所有标签,因此脚本必须:
- 读取文件夹和子文件夹
- 打开文件并查找标签
- 如果存在,则删除并保存有更改的文件
我有什么:
import os
for root, dirs, files in os.walk(os.curdir):
if files.endswith('.cpp'):
%Find //$ and delete until next $
if files.endswith('.h'):
%Find //$ and delete until next $
if files.endswith('.txt'):
%Find #$ and delete until next $
if files.endswith('.xml'):
%Find <!-- $ and delete until next $ and -->
最佳答案
一般的解决方案是:
- 使用
os.walk()
函数遍历目录树。 - 遍历文件名并使用
fn_name.endswith('.cpp')
和 if/elseif 来确定您正在使用哪个文件 - 使用
re
模块创建可用于确定某行是否包含您的标记的正则表达式 - 打开目标文件和一个临时文件(使用
tempfile
模块)。逐行遍历源文件并将过滤后的行输出到您的临时文件。 - 如果替换了任何行,请使用
os.unlink()
加上os.rename()
替换您的原始文件
对于 Python 专家来说,这是一个微不足道的练习,但对于语言新手来说,可能需要几个小时才能开始工作。不过,您可能无法要求更好的任务来介绍该语言。祝你好运!
-----更新-----
os.walk 返回的 files
属性是一个列表,因此您也需要对其进行迭代。此外,files
属性将只包含文件的基本名称。您需要结合使用 root
值和 os.path.join()
将其转换为完整路径名。尝试这样做:
for root, d, files in os.walk('.'):
for base_filename in files:
full_name = os.path.join(root, base_filename)
if full_name.endswith('.h'):
print full_name, 'is a header!'
elif full_name.endswith('.cpp'):
print full_name, 'is a C++ source file!'
如果您使用的是 Python 3,打印语句将需要是函数调用,但总体思路保持不变。
关于python - 如何在 python 中编写标签删除器脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3856160/