2013-06-13 35 views
2
#--------------------------------------------------------- 
# Print days diff by Converting Unix timestamp to Readable Date/time 
#--------------------------------------------------------- 
def convUnixTime(t): 
     return 1+(datetime.datetime.fromtimestamp(t*60*60*24) 
       - datetime.datetime.today()).days 


#--------------------------------------------------------- 
# Read shadow file and check for account expires and create dictionary 
#--------------------------------------------------------- 
with open("/etc/shadow") as shadow: 
     for aLine in shadow: 
       filed = aLine.split(":") 
       f = filed[7] 
       try: 
        f = int(f) 
        f=convUnixTime(f) 
       except ValueError: 
        f = "NULL" 
       if f != "NULL" and f <= 0: 
         total_expired_users += 1 
         expr_list[ filed[0] ] = f 
       elif f != "NULL" and f <= min_days: 
         total_expring_users += 1 
         expr_list[ filed[0] ] = f 

我创建的用户是哪个帐户已到期的字典,但我认为这更多的清洁和简单的方式已经完成..提前的Python:创建字典

谢谢!

+0

Python是一个奇怪的语言 - 它使用一本字典作为地图。不要试图在现实生活中做到这一点! :) – NoBugs

+0

@NoBogs这是什么影响? –

+0

在现实生活中使用字典作为地图根本无济于事,它只会让人迷失方向。 – NoBugs

回答

1

这看起来与try-except条款清洁:

try: 
    f = int(f) 
    f=convUnixTime(f) 
except ValueError: 
    pass 
else: 
    if f <= 0: 
     total_expired_users += 1 
     expr_list[ filed[0] ] = f 
    elif f <= min_days: 
     total_expring_users += 1 
     expr_list[ filed[0] ] = f 

您还可以更改整理了一下,以避免expr_list[filed[0]]重复:

if f <= min_days: 
    expr_list[filed[0]] = f 

    if f <= 0: 
     total_expired_users += 1 
    else: 
     total_expiring_users += 1 
+0

谢谢...不错...测试..工作.. .. –

0

感谢变成真正的,

随着帮你改正,我已经创造了最后的..

#--------------------------------------------------------- 
# Convert Unix timestamp to Readable Date/time 
#--------------------------------------------------------- 
def convUnixTime(t): 
     return datetime.datetime.fromtimestamp(t*60*60*24) 


#--------------------------------------------------------- 
# Read shadow file and check for account expriry 
#--------------------------------------------------------- 
with open("/etc/shadow") as shadow: 
     for aLine in shadow: 
       filed = aLine.split(":") 
       f = filed[7] 
       try: 
         f = int(f) 
         exprdate = convUnixTime(f) 
         f=1+(exprdate - datetime.datetime.today()).days 
         l=[f,exprdate] 
       except ValueError: 
         pass 
       else: 
         if f <= min_days: 
           expr_list[filed[0]]=l 
         if f <= 0: 
           total_expired_users += 1 
         else: 
           total_expring_users += 1 

解析后全Script .. 输出:

====>>Following 3 Account has been Expired 
rahul :: Expired on 2013-06-12 05:30:00 
test  :: Expired on 2013-06-01 05:30:00 
vinayak :: Expired on 1970-01-01 05:30:00 
====>>Following 4 Account will be Expire in 20 Days 
suraj :: 2 days || Last date :: 2013-06-15 05:30:00 
ram  :: 1 days || Last date :: 2013-06-14 05:30:00 
javed :: 2 days || Last date :: 2013-06-15 05:30:00 
shyam :: 2 days || Last date :: 2013-06-15 05:30:00 
1

你可以使用列表解析来简化代码:

import datetime 

min_days = 20000 

def conv_unix_time(t): 
    return (1+(datetime.datetime.fromtimestamp(int(t)*60*60*24) 
      - datetime.datetime.today()).days) if t else None 

with open('foo.txt') as shadow: 
    expire_durations = {line.split(':')[0]: conv_unix_time(line.split(':')[7]) for line in shadow} 

print [user for user, time in expire_durations.iteritems() if time and time < 0] 
print [user for user, time in expire_durations.iteritems() if time and 0 < time < min_days]