【发布时间】:2015-05-21 12:00:04
【问题描述】:
我有以下脚本,它循环遍历 css 规则的文本文件,并将每个规则及其属性存储在字典中(欢迎改进代码,我才刚刚开始使用 Python):
findGroups.py
import sys
source = sys.argv[1]
temp = open('pythonTestFile.txt', 'w+')
di = {}
with open(source, 'r') as infile:
for line in infile:
# if line starts with . or #, contains _ or - between
# words and has a space and opening brace(ie is css rule name)
if re.search('((([\.\-\'])?\w+\s?\{', line):
key = line.replace("{", "")
di[key] = []
line = next(file)
while "}" not in line:
# remove trailing whitespace and \n
line = ' '.join(line.split())
di[key].append(line)
line = next(infile)
temp.close();
source.txt
* {
min-height: 1000px;
overflow: hidden;
}
.leftContainerDiv {
font-family: Helvetica;
font-size: 10px;
background: white;
}
#cs_ht_panel{
font-family:10px;
display:block;
font-family:Helvetica;
width:auto;
}
//...etc
我希望输出看起来像这样(也欢迎提出可读性建议):
pythonTestFile.txt
Group 1, count(2) - font-family: Helvetica; + font-size: 10px;
Group 2: //...etc
我现在要做的是找出哪些 css 属性是重复出现的组,例如,如果 font-size: 10px 和 font-family: Helvetica 一起出现在一个规则中,那么这个组是否出现在其他任何一个组中规则以及它发生了多少次。
我不完全确定该去哪里,我什至不知道如何启动某种比较算法,或者字典是否是存储文本的正确数据结构。
编辑:回应评论,我无法使用第三方库。此脚本将在 Red Hat VM 上使用,并且只能将预先批准的软件推送到这些虚拟机上,我无法仅下载库或软件包
【问题讨论】:
-
我不介意投反对票,但至少解释一下为什么这个问题被投反对票以便我可以解决它
-
您的努力确实是在编写一个 css 解析器。像 tinycss (pythonhosted.org/tinycss) 这样的东西不是一个很好的起点并修改或使用它的 API 吗?
-
我将为此问题添加更多细节,但不能选择使用第三方库。这是用于 Red Hat 虚拟机的,我们可以在这些虚拟机上使用什么软件有很大的限制。基本上我们不能下载任何第三方软件,我们使用的任何东西都是经过各种人预先批准并推送到虚拟机上的,所以我只能访问已经安装在 Red Hat 实例上的任何编程语言或工具。我同意也许手动滚动/修改/使用现有的 CSS 解析器可以使这更简单,但不幸的是它不是一个选项
-
取决于他们的许可是什么 - 你可以从那里挑选零件并开始它。所以你基本上是手写你想要的,只是你不要从头开始,这样可以节省一些时间。即使这样,它也可能比快速解决方案要长得多
-
您要查找的选择器将只有 2 或 3 还是一般任何 n?
标签: python sorting file-io python-2.6