Top/Devel/Python

Pythonはてなブックマーク

#!/usr/bin/env python

import sys
import subprocess
import shutil
import os
import os.path
import time
import datetime
import zipfile
import tempfile


def connect_netdrive(drive, host, username, password):
    cmd = 'net use ' + drive + ' ' + r'\\' + host + ' /user:' + username + ' ' + password
    p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    p.wait()
#	if p.returncode == 2:
#		if '1219' in p.communicate()[1]:
#			disconnect_netdrive(host)
#			connect_netdrive(host, username, password)


def disconnect_netdrive(drive):
    cmd = 'net use ' + drive + ' /delete /y'
    p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    p.wait()


def is_target_with_name(src_file, today):
    if src_file.endswith('.zip') \
            and (today in src_file) \
            and ('env.properties' in src_file):
        return True
    return False


def is_target_with_time(src_full_path, start_time, end_time):
    adj_time = 300

    file_time = os.stat(src_full_path).st_mtime

    if (file_time > start_time - adj_time) \
            and (file_time < end_time + adj_time):
        return True
    return False


def read_keys_from_conf():
    keys = []
    key_file = file('keys.txt', 'r')
    key = key_file.readline()
    while key:
        keys.append(key.rstrip('\n'))
        key = key_file.readline()
    key_file.close()

    return keys


def write_dst_file(src_full_path):
    keys = read_keys_from_conf()

    arc_file = zipfile.ZipFile(src_full_path, 'r')
    for inner_file in arc_file.namelist():
        unarc_file = tempfile.TemporaryFile()
        unarc_file.write(arc_file.read(inner_file))

        src_base = os.path.basename(src_file)
        inner_base = os.path.basename(inner_file)
        dst_file = file(src_base + '_' + inner_base, 'wb')

        buf = []
        unarc_file.seek(0)
        line = unarc_file.readline()
        while line:
            for key in keys:
                if key in line:
                    buf.append(line)
            line = unarc_file.readline()
        unarc_file.close()
        buf.sort()
        dst_file.write(''.join(buf))
        dst_file.close()
    arc_file.close()


if __name__ == '__main__':
    start_time = time.time()
    time.sleep(2)
    end_time = time.time()

#	connect_netdrive('z:', 'host', 'username', 'password')

#	src = r'\\parm\users\foobar\desktop\readme.txt'
#	dst = r'C:\users\foobar\desktop\readme2.txt'
#	shutil.copy2(src, dst)

    src_dir = r'C:\users\foobar\desktop\bbb'
    if not os.path.isdir(src_dir):
        sys.exit('dir did not exists.')

    today = datetime.date.today().strftime('%Y%m%d')
    src_files = os.listdir(src_dir)
    for src_file in src_files:
        if is_target_with_name(src_file, today):
            src_full_path = os.path.join(src_dir, src_file)
            if is_target_with_time(src_full_path, start_time, end_time):
                write_dst_file(src_full_path)
差分 一覧