我有一个包含许多不同条目的文本文件。我想做的是取第一列,使用每个唯一值作为键,然后将第二列存储为值。我实际上有这个工作,但我正在寻找一个更好的方法来做到这一点。这是我的示例文件:
account_check:"login/auth/broken"
adobe_air_installed:kb_base+"/"+app_name+"/Path"
adobe_air_installed:kb_base+"/"+app_name+"/Version"
adobe_audition_installed:'SMB/Adobe_Audition/'+version+'/Path'
adobe_audition_installed:'SMB/Adobe_Audition/'+version+'/ExePath'
以下是我用于解析文本文件的代码:
val_dict = {}
for row in creader:
try:
value = val_dict[row[0]]
value += row[1] + ", "
except KeyError:
value = row[1] + ", "
val_dict[row[0]] = value
for row in val_dict.items():
values = row[1][:-1],row[0]
cursor.execute("UPDATE 'plugins' SET 'sets_kb_item'= ? WHERE filename= ?", values)
以下是我用来查询+格式化当前数据的代码:
def kb_item(query):
db = get_db()
cur = db.execute("select * from plugins where sets_kb_item like ?", (query,))
plugins = cur.fetchall()
for item in plugins:
for i in item['sets_kb_item'].split(','):
print i.strip()
这是输出:
kb_base+"/Installed"
kb_base+"/Path"
kb_base+"/Version"
我花了很多次尝试,但我终于以我想要的方式得到了输出,但是我正在寻找批评。有一个更好的方法吗?我的整个for item in plugins.... print i.strip()
可以在一行中完成并保存为变量吗?我对使用数据库非常陌生,我的python技能也可以使用刷新。
注意我在这段代码中使用了csvreader,因为我最初有一个.csv文件 - 但我发现使用我提供的.txt文件同样容易。