所以我有2个文件:config.txt
和一个CSS文件。
我想要做的是从配置文件中读取color属性并将其替换为CSS文件。
配置文件:
color: #ffffff;
CSS文件:
body{ color: #000000;} h1{color:#000000;}
我需要做的是用配置文件color
替换CSS文件color
,如何使用Python文件操作替换color
h1
标签而不是body
标签?
答案 0 :(得分:0)
您可以结合使用fileinput
模块进行就地文件编辑,使用re
正则表达式模块对该特定h1
代码进行搜索和替换。
首先是代码:
(注意我使用" config.txt"用于配置文件," output.css"用于CSS文件)
# read the color from the config file
color_config = ""
with open("config.txt", "r") as config_file:
for line in config_file:
if line.startswith("color"):
color_config = "h1 {" + line.strip() + "}"
break
# update the css file in-place
with fileinput.input(files=("output.css"), inplace=True) as css_file:
for line in css_file:
# the h1 tag could be on its own line or could be part of
# a line with other styles, so we capture them in groups
matches = re.match(r"(.*)(h1\s*\{color:.*\})(.*)", line)
if matches:
# group(0): entire matching line
# group(1): everything before the h1 tag
# group(2): the h1 tag
# group(3): everything after the h1 tag
print(line.replace(matches.group(2), color_config), end="")
else:
print(line, end="")
有一些解释:
with
块是我们读取配置文件以获取color: #ffffff;
值的地方。我在这里假设它已放置在自己的行上(这就是我使用startswith
的原因)。我不知道您的配置文件是什么样的,所以只需根据您的需要进行调整即可。 color: #ffffff;
存储到color_config
,格式为h1 { .. }
字符串。我们现在对其进行格式化,以便以后轻松搜索和替换。with
块执行就地文件搜索和替换。它使用fileinput.input
,inplace
参数设置为True
。来自文档:可选的就地过滤:如果关键字参数
inplace=True
是 传递给fileinput.input()
或FileInput
构造函数,即文件 被移动到备份文件,标准输出被定向到输入 文件(如果已存在与备份文件同名的文件,则为 将被默默地替换)。这使得编写过滤器成为可能 在适当的位置重写其输入文件。如果 backup 参数是 给定(通常为backup='.<some extension>'
),它指定 备份文件的扩展名,备份文件仍然存在;通过 默认情况下,扩展名为'.bak'
,并在输出时删除 文件已关闭。
with
块中,我们读取CSS文件的每一行,替换部分字符串,然后print
将其重新发送回同一文件(fileinput
重定向{{1} 1}}输出到文件)。在进行就地文件编辑时,最好不要在其他任何地方打开CSS文件。 print
标记。我们使用re.match
执行此操作。我不会进入 long 关于如何使用正则表达式的解释(你必须自己阅读)。我只是描述使用的模式:
h1
re.match(r"(.*)(h1\s*\{color:.*\})(.*)", line)
{H1 {1}}
(.*) match and group everything before and after the
tag
\s* match 0 or more spaces between h1 and {
match.group
获取\{, \} match the brackets (escaped, because {} are regex special chars)
标记。 color:.* match any number of characters between color: and }
执行实际string replacement,然后将其打印到文件中。请注意,我可选择将h1
传递给color_config
,因为默认情况下end=""
输出包含换行符。同样,我不知道你的CSS文件是什么样的,所以根据需要进行调整。