|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
ctestRatio = 30;#180/10000 = 1.8%
如上是文件中的数据,我要通过cPanelSpreadRatio在文件中搜索匹配=和;之间的30这个值,可以用r'(?<==)(?=;)匹配吗,小白不会弄,这里用=做了分隔符,但是=后面值的后面是分号,分号后面太杂乱了,所以想用=和;之间的数据作为value
部分代码如下
- def read_file(file_path):
- with open(file_path, 'rb') as f:
- # 检测文件编码
- result = chardet.detect(f.read())
- f.seek(0)
- return f.readlines()
- for file_path in all_files:
- if file_path.endswith('.ini'):
- #print("打印文件:" + file_path)
- f = read_file(file_path)
- # 遍历需要抓取的key并输出对应的值
- try:
- for each_line in f:
- for key in PQ_keys:
- if key in each_line.decode('utf-8'):
- [color=Red]key, value = each_line.decode('utf-8').strip().split('=')[/color]
- print('{}:{}={}'.format(file_path, key, value))
- except UnicodeDecodeError:
- print('解码文件 {} 时发生错误'.format(file_path))
复制代码
[b]因为我用了一个 f-string 的语法是 python 3.6 以后才有的,你可以改一下
for file_path in all_files:
if file_path.endswith('.ini'):
#print("打印文件:" + file_path)
f = read_file(file_path)
# 遍历需要抓取的key并输出对应的值
try:
for each_line in f:
for key in PQ_keys:
text = each_line.decode('utf-8')
if key in text:
lst = re.findall(r"{}\s*=\s*(\S+?);".format(key), text)
print(key)#这里打印出来的是key列表没问题
print(lst)#这里打印出来是空,没匹配到?
if lst:
for value in lst:
print('{}:{}={}'.format(file_path, key, value))
except UnicodeDecodeError:
print('解码文件 {} 时发生错误'.format(file_path)) [/b]
|
|