簡體   English   中英

Python - 從 yml 文件中獲取空密鑰

[英]Python - Get empty key from yml file

我有很多結構相似但數據不同的 yaml 文件名。 我需要解析出選擇性數據,並將其作為三列放入單個 csv (excel) 文件中。

但我面臨一個空鍵問題,總是給我一個“KeyError:'port'”

我的 yaml 文件示例:

base:
   server: 10.100.80.47
   port: 3306
   namePrefix: well
   user: user1
   password: kjj&%$

 base:
   server: 10.100.80.48
   port: 
   namePrefix: done
   user: user2
   password: fhfh#$%

在第二個塊中,我有一個空的“端口”,而我的腳本就卡在了這一點上。 我總是需要找到一個空鍵,它不會寫任何東西。

   from asyncio.windows_events import NULL
   from queue import Empty
   import yaml
   import csv
   import glob


   yaml_file_names = glob.glob('./*.yaml')

   rows_to_write = []

   for i, each_yaml_file in enumerate(yaml_file_names):
   print("Processing file {} of {} file name: {}".format(
    i+1, len(yaml_file_names),each_yaml_file))

   with open(each_yaml_file) as file: 
    data = yaml.safe_load(file)


   for v in data:
    if "port" in v == "": 
    data['base']['port'] = ""  



  rows_to_write.append([data['base']['server'],data['base']['port'],data['server']['host'],data['server']['contex']])


  with open('output_csv_file.csv', 'w', newline='') as out:
    csv_writer = csv.writer(out)
    csv_writer.writerow(["server","port","hostname", "contextPath"])
    csv_writer.writerows(rows_to_write)
    print("Output file output_csv_file.csv created")

輸出

您正在嘗試按索引訪問密鑰,例如

data['base']['port']

但是您想要的是使用 get 方法訪問它,如下所示:

data['base'].get('port')

這樣,如果鍵不存在,它將默認返回 None,您甚至可以通過將其作為第二個參數傳遞來將默認值更改為您想要的任何值。

在 PyYAML 中,空元素返回為None ,而不是空字符串。

if data['base']['port'] is None: 
    data['base']['port'] = "" 

您的 yaml 文件無效。 在 yaml 文件中,只要您有一個密鑰(如您的示例中的port: :),您就必須提供一個值,您不能將其留空,並將 go 留到下一行。

這可能是您無法使用 python yaml 模塊按預期解析文件的原因。 如果您是那些 yaml 文件的創建者,您真的需要在文件中放置一個密鑰,例如port: None如果您不想為端口提供值,或者更好的是您根本不提供任何端口密鑰.

然后其他解決方案應該可以工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM