簡體   English   中英

使用Python比較目錄和文本文件

[英]Compare over directory and text file using Python

我的目標是比較兩個數據,一個來自文本文件,一個來自目錄,比較之后,這將通知或在控制台中顯示未找到的數據,例如:

ls: /var/patchbundle/rpms/:squid-2.6.STABLE21-7.el5_10.x86_64.rpm NOT FOUND!
ls: /var/patchbundle/rpms/:tzdata-2014j-1.el5.x86_64.rpm 
ls: /var/patchbundle/rpms/:tzdata-java-2014j-1.el5.x86_64.rpm 
ls: /var/patchbundle/rpms/:wireshark-1.0.15-7.el5_11.x86_64.rpm
ls: /var/patchbundle/rpms/:wireshark-gnome-1.0.15-7.el5_11.x86_64.rpm 
ls: /var/patchbundle/rpms/:yum-updatesd-0.9-6.el5_10.noarch.rpm NOT FOUND

一定是那樣 所以這是我的python代碼。

import package, sys, os, subprocess

path = '/var/tools/tools/newrpms.txt'

newrpms = open(path, "r")
fds = newrpms.readline()
def checkrc(rc):
            if(rc != 0):
                    sys.exit(rc)
cmd = package.Errata()
for i in newrpms:
    rc = cmd.execute("ls /var/patchbundle/rpms/ | grep %newrpms ")
        if ( != 0):
                    cmd.logprint ("%s not found !" % i)
checkrc(rc)
sys.exit(0)
newrpms.close

請參閱外殼腳本。 這個腳本執行文件,但是因為我想使用另一種語言,所以我嘗試使用python

retval=0
for i in $(cat /var/tools/tools/newrpms.txt)
do
        ls /var/patchbundle/rpms/ | grep $i
        if [ $? != 0 ]
        then
                echo "$i NOT FOUND!"
                retval=255
        fi
done
exit $retval

請查看我的Python代碼。 出問題了,因為它沒有像執行它的shell那樣執行。

您沒有說“ newrpms.txt”的內容是什么; 您說腳本沒有按照您的意願執行-但您沒有說腳本在做什么; 我不知道什么packagepackage.Errata是什么,所以我在猜問題。 但是很多事情是錯誤的。

  1. if ( != 0):是語法錯誤。 如果{empty space}不等於零?

  2. cmd.execute("ls /var/patchbundle/rpms/ | grep %newrpms ")可能沒有執行您想要的操作。 您不能像這樣在Python中的字符串中放置變量,並且如果可以的話, newrpms是文件句柄而不是當前行。 那應該是...grep %s" % (i,))嗎?

  3. 控制流程正在執行:

    1. 在此文件夾中查找,嘗試查找文件
    2. 調用checkrc()
    3. 如果找不到最后一個文件,則僅退出並顯示錯誤
  4. newrpms.close沒做任何事情,它需要是newrpms.close()才能調用close方法。

您正在用Python寫shell腳本。 怎么樣:

import os, sys

retval=0

for line in open('/var/tools/tools/newrpms.txt'):
    rpm_path = '/var/patchbundle/rpms/' + line.strip()
    if not os.path.exists(rpm_path):
        print rpm_path, "NOT FOUND"
        retval = 255
    else:
        print rpm_path

sys.exit(retval)

稍微編輯了一下代碼,並說明:

該代碼幾乎是將Shell腳本直接復制到Python中的。 它循環遍歷文本文件中的每一行,並調用line.strip()在結尾處消除換行符。 它會生成rpm_path ,類似於“ /var/patchbundle/rpms/:tzdata-2014j-1.el5.x86_64.rpm”。

然后,它使用sys.path.exists()來測試文件是否存在,如果存在則返回True,否則返回False,並使用該測試設置錯誤值並打印結果,就像shell腳本打印它們一樣。 這將替換代碼中的“ ls ... | grep”部分,以檢查文件是否存在。

暫無
暫無

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

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