簡體   English   中英

Python逐行數據處理

[英]Python line by line data processing

我是python的新手,我搜索了幾篇文章,但是找不到正確的語法來讀取文件並在python中進行awk行處理。 我需要您的幫助來解決這個問題。

這就是我用於構建和部署的bash腳本的外觀,我在bash中讀取了一個configurationf文件,如下所示。

backup             /apps/backup
oracle             /opt/qosmon/qostool/oracle    oracle-client-12.1.0.1.0

bash閱讀部分的腳本如下所示

while read line
  do
    case "$line" in */package*) continue ;; esac
    host_file_array+=("$line")
  done < ${HOST_FILE}
 for ((i=0 ; i < ${#host_file_array[*]}; i++))
  do
    # echo "${host_file_array[i]}"
     host_file_line="${host_file_array[i]}"

     if [[ "$host_file_line" != "#"* ]];
     then
       COMPONENT_NAME=$(echo $host_file_line  | awk '{print $1;}' )
       DIRECTORY=$(echo $host_file_line  | awk '{print $2;}' )
       VERSION=$(echo $host_file_line  | awk '{print $3;}' )

       if [[ ("${COMPONENT_NAME}" == *"oracle"*)  ]];
       then
         print_parameters "Status ${DIRECTORY}/${COMPONENT_NAME}"
         /bin/bash ${DIRECTORY}/${COMPONENT_NAME}/current/script/manage-oracle.sh  ${FORMAT_STRING} start
       fi
     etc .........

Python可以多么令人羡慕。 到目前為止,這是我在python中准備的。

f  = open ('%s' % host_file,"r")
array = []
line = f.readline()
index = 0
while line:
    line = line.strip("\n ' '")
    line=line.split()
    array.append([])
    for item in line:
        array[index].append(item)
    line = f.readline()
    index+= 1
f.close()

我嘗試在python中使用split,因為配置文件在所有行中的列數均不相等,所以出現了索引綁定錯誤。 什么是處理它的最佳方法。

我認為字典在這里可能很合適,您可以按以下方式生成它們:

>>> result = []
>>> keys = ["COMPONENT_NAME", "DIRECTORY", "VERSION"]
>>> with open(hosts_file) as f:
...     for line in f:
...         result.append(dict(zip(keys, line.strip().split())))
...     
>>> result
[{'DIRECTORY': '/apps/backup', 'COMPONENT_NAME': 'backup'},
 {'DIRECTORY': '/opt/qosmon/qostool/oracle', 'VERSION': 'oracle-client-12.1.0.1.0', 'COMPONENT_NAME': 'oracle'}]

如您所見,這將創建一個詞典列表。 現在,當您訪問字典時,您知道其中一些可能不包含'VERSION'鍵。 有多種處理方法。 您可以try/except KeyError或者使用dict.get()獲取值。

例:

>>> for r in result:
...     print r.get('VERSION', "No version")
...     
... 
No version
oracle-client-12.1.0.1.0
result = [line.strip().split() for line in open(host_file)]

暫無
暫無

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

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