【发布时间】:2017-02-19 00:14:34
【问题描述】:
我的问题:如何通过基于正则表达式匹配的字典键('^--L-[0-9]{8}')从列表中创建字典,并通过使用每个键之间的所有行来分配值。
原始文件的示例摘录:
SQL> --L-93752133
SQL> --SELECT table_name, tablespace_name from dba_tables where upper(table_name) like &tablename_from_developer;
SQL>
SQL> --L-52852243
SQL>
SQL> SELECT log_mode FROM v$database;
LOG_MODE
------------
NOARCHIVELOG
SQL>
SQL> archive log list
Database log mode No Archive Mode
Automatic archival Disabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 3
Current log sequence 5
SQL>
SQL> --L-42127143
SQL>
SQL> SELECT t.name "TSName", e.encryptionalg "Algorithm", d.file_name "File Name"
2 FROM v$tablespace t
3 , v$encrypted_tablespaces e
4 , dba_data_files d
5 WHERE t.ts# = e.ts#
6 AND t.name = d.tablespace_name;
no rows selected
一些额外的细节:原始文件可能很大(至少 80K+ 行,但通常更大),我需要保留原始间距,以便输出仍然易于阅读。以下是我读取文件并从每行开头删除“SQL>”的方式:
with open(rawFile, 'r') as inFile:
content = inFile.read()
rawList = content.splitlines()
for line in rawList:
cleanLine = re.sub('^SQL> ', '', line)
查找我要查找的字典键很容易:
pattern = re.compile(r'^--L-[0-9]{8}')
if pattern.search(cleanLine) is not None:
itemID = pattern.search(cleanLine)
print(itemID.group(0))
但是如何将每个键之间的所有行分配为属于它们之前的最新键的值?我一直在玩新的列表、元组和字典,但我所做的一切都是返回垃圾。目标是让数据和键相互关联,以便稍后在脚本中根据需要返回它们。
我花了一些时间寻找类似的问题,但在大多数其他情况下,源文件已经是类似字典的格式,因此创建新字典不是一个复杂的问题。也许字典或元组不是正确的答案,但任何帮助将不胜感激!谢谢!
【问题讨论】:
标签: regex list python-3.x dictionary tuples