Maison développement back-end Tutoriel Python python 提取文件的小程序

python 提取文件的小程序

Jun 06, 2016 am 11:26 AM
python Extraire des fichiers

以前提取这些文件用的是一同事些的批处理文件;用起来不怎么顺手,刚好最近在学些python,所有就自己动手写了一个python提取文件的小程序;
1、原理
提取文件的原理很简单,就是到一个指定的目录,找出最后修改时间大于给定时间的文件,然后将他们复制到目标目录,目标目录的结构必须和原始目录一致,这样工程人员拿到后就可以直接覆盖整个目录;
2、实现
为了程序的通用,我定义了下面的配置文件
config.xml

代码如下:




    E:\temp\home\cargill
    E:\temp\dest\cargill
    
        
            

E:\temp\home\cargill\WEB-INF\lib
            E:\temp\home\cargill\static\cargill\report
        
        
            E:\temp\home\cargill\WEB-INF\classes\myrumba.xml
            E:\temp\home\cargill\META-INF\context.xml
        

    
    2008-10-11 13:15:22
    C:\Program Files\WinRAR


其中
:原始目录,即我们tomcat的发布目录;
:文件复制到得目标目录;
:需要忽略的文件夹和文件,具体需要忽略的内容在其子节点中定义,这里不在解释;
:这个是初始化需要提取的时间点,在这之后的才会提取,此处需要说明,后来在使用中,我增加了一个功能,就是每次提取完会自动将本次提取时间记录到一个文本文件C_UPGRADETIME.txt中,这就省去每次设置这个值的烦恼,只有C_UPGRADETIME.txt为空或者不存在时,才会用到这个值;
:rar压缩程序的地址;
下面是读取配置文件的类:
config.py

代码如下:


'''
Created on Mar 3, 2009
@author: alex cheng
'''
from xml.dom.minidom import parse, parseString
import datetime
import time
class config(object):
'''
config.xml
'''
def __init__(self, configfile):
'''
configfile:config files
'''
dom = parse(configfile)
self.config_element = dom.getElementsByTagName("config")[0]
def getSrcDir(self):
'''
return the element value of self.config_element
'''
srcDir = self.config_element.getElementsByTagName("srcdir")[0]
return self.getText(srcDir.childNodes)
def getDestDir(self):
'''
return the element value of self.config_element
'''
destDir = self.config_element.getElementsByTagName("destdir")[0]
return self.getText(destDir.childNodes)
def getNotIncludeDirs(self):
'''
return a list, it's the

element values of self_config_element
'''
notinclude_dirs = self.config_element.getElementsByTagName("dir")
dirList = []
for node in notinclude_dirs:
dir = self.getText(node.childNodes)
if dir != '':
dirList.append(dir)
return dirList
def getNotIncludeFiles(self):
'''
return a list, it's the element values of self.config_element
'''
notinclude_files = self.config_element.getElementsByTagName("file")
fileList = []
for node in notinclude_files:
file = self.getText(node.childNodes)
if file != '':
fileList.append(file)
return fileList
def getText(self, nodeList):
'''
return the text value of the nodeList node
'''
rc = ''
for node in nodeList:
if node.nodeType == node.TEXT_NODE:
rc = rc + node.data
return rc
def getInitTime(self):
'''
return a datetime object,it's the element value of self.config_element
'''
initTime = self.config_element.getElementsByTagName("inittime")[0]
timeStr = self.getText(initTime.childNodes)
dt = datetime.datetime.strptime(timeStr, "%Y-%m-%d %H:%M:%S")
fdt = time.mktime(dt.utctimetuple())
return fdt
def getWinRarDir(self):
'''
return the value of element value
'''
rardir = self.config_element.getElementsByTagName('rardir')[0]
return self.getText(rardir.childNodes)
if __name__ == '__main__':
c = config('config.xml')
home = c.getSrcDir()
print('home is ', home)
dest = c.getDestDir()
print('dest is ', dest)
dirlist = c.getNotIncludeDirs()
print('not include directory is:')
for n in dirlist:
print(n)
filelist = c.getNotIncludeFiles()
print('not include files is:')
for n in filelist:
print(n)
inittime = c.getInitTime()
print('inittime is', inittime)
rardir = c.getWinRarDir()
print(rardir)


下面是程序的主体:
fetchfile.py

代码如下:


'''
Created on Mar 3, 2009
@author: alex cheng
'''
from config import config
from os import chdir, listdir, makedirs, system, walk, remove, rmdir, unlink, \
removedirs, stat, getcwd
from os.path import abspath, isfile, isdir, join as join_path, exists
from shutil import copy2
from sys import path
import datetime
import re
import time
def getdestdir(dir):
'''
return the dest directory name;
it's named by date,for example 20090101; if 20090101 has exist the return 20090101(1),if 20090101(1) has exist also,
then return 20090101(2), and then...
'''
today = datetime.datetime.today()
strtoday = today.strftime('%Y%m%d')
dr = join_path(dir, strtoday)
tmp = dr
index = 0
while isdir(tmp):
tmp = dr
index = index + 1
tmp = tmp + '(' + '%d' % index + ')'
return tmp
def fetchFiles(srcdir, destdir, ignoredirs, ignorefiles, lasttime=time.mktime(datetime.datetime(2000, 1, 1).utctimetuple())):
'''
fetch files from srcdir(source directory) to destdir(dest directory) ignore the notcopydires(the ignore directory list)
and notcopyfiles(the ignore file list), and the file and directory's modify time after the lasttime
'''
chdir(srcdir) # change the current directory to the srcdir
dirs = listdir('.') # get all files and directorys in srcdir, but ignore the "." and ".."
dirlist = [] # save all directorys in srcdir
for n in dirs:
if isdir(n):
dirlist.append(n)
for subdir in dirlist:
exist = False
for ignoredir in ignoredirs:
if join_path(srcdir, subdir) == ignoredir:
exist = True
break
if exist:
continue
fetchFiles(join_path(srcdir, subdir), join_path(destdir, subdir), ignoredirs, ignorefiles, lasttime)
copyfiles(srcdir, destdir, ignorefiles, lasttime)
def copyfiles(srcdir, destdir, ignorefiles, lasttime):
'''
copy the files from srcdir(source directory) to destdir(dest directory, if dest directory not exist then create is)
ignore the notcopyfiles(the ignore file list) and the file's modify time must after lasttime
'''
chdir(srcdir)
files = filter(isfile, listdir('.'))
for file in files:
if isdir(file): # ignore the directory
continue
lastmodify = stat(file).st_mtime
if lastmodify continue
exist = False
for ignorefile in ignorefiles:
if join_path(srcdir, file) == ignorefile:
exist = True
if not exist:
if isdir(destdir) is False:
try:
makedirs(destdir)
print('success create directory:', destdir)
except:
raise Exception('failed create directory: ' + destdir)
try:
copy2(file, join_path(destdir, file))
print('success copy file from', join_path(srcdir, file), 'to', join_path(destdir, file))
except:
raise Exception('failed copy file from ' + join_path(srcdir, file) + ' to ' + join_path(destdir, file))

def tarfiles(dir, todir, winrardir, tarfilename):
'''
tar all files in dir(a directory) to todir(dest directory) and the tar file named tarfilename
'''
if isdir(dir) is False:
print('the directory', dir, 'not exist')
return
chdir(dir)
commond = '\"' + winrardir + '\\rar.exe\" a -r ' + todir + '\\' + tarfilename + ' *.*'
print(commond)
if system(commond) == 0:
print('success tar files')
else:
print('failed tar files')

def removeDir(dir_file, currentdir):
'''
delete the dir_file
'''
if isdir(currentdir) is False:
print()
return
chdir(currentdir)
if not exists(dir_file):
return
if isdir(dir_file):
for root, dirs, files in walk(dir_file, topdown=False):
for name in files:
remove(join_path(root, name))
for name in dirs:
rmdir(join_path(root, name))
rmdir(dir_file) # remove the main dir
else:
unlink(dir_file)
return
def getlasttime():
'''
get last modify time from txt files
'''
try:
mypath = abspath(path[0]) #get current path
file = join_path(mypath, 'C_UPGRADETIME.txt')
if isfile(file) is False:
return 0
f = open(join_path(mypath, 'C_UPGRADETIME.txt'), 'r')
lines = f.readlines()
if len(lines) == 0:
return 0
line = lines[ - 1]

dt = datetime.datetime.strptime(line, "%Y-%m-%d %H:%M:%S")
lasttime = time.mktime(dt.utctimetuple())
f.close()
return lasttime
except:
print('failed to get last modify time from txt file')
return 0
def registtime():
nowstr = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))
nowfloat = time.time()
mypath = abspath(path[0]) # get current path
f = open(join_path(mypath, 'C_UPGRADETIME.txt'), 'a')
f.write('\n' + nowstr)
f.close()
def main():
c = config('config.xml')
home = c.getSrcDir()
dest = c.getDestDir()
ignoreDirs = c.getNotIncludeDirs()
ignoreFiles = c.getNotIncludeFiles()
winRarDir = c.getWinRarDir()

dest = getdestdir(dest)# get current dest directory

print ('copy all files to the temp directory ignore last fetch time')
fetchFiles(home, join_path(dest, 'temp'), ignoreDirs, ignoreFiles)

print('tar the all files')
tarfiles(join_path(dest, 'temp'), dest, winRarDir, 'CargillUpdate_ALL.rar')

print('program sleep 20 seconds to finish the tar thread')
time.sleep(20)

print('remove the temp directory...')
removeDir(join_path(dest, 'temp'), dest)
print('success remove the temp directory')
lasttime = getlasttime() # get last modify time from txt files
if lasttime == 0:
lasttime = c.getInitTime()
print ('copy all files to the temp2 directory last modify time after last fetch time')
fetchFiles(home, join_path(dest, 'temp2'), ignoreDirs, ignoreFiles, lasttime)

print('tar the all files')
tarfiles(join_path(dest, 'temp2'), dest, winRarDir, 'CargillUpdate.rar')
print('program sleep 20 seconds to finish the tar thread')
time.sleep(20)

print('remove the temp2 directory...')
removeDir(join_path(dest, 'temp2'), dest)
print('success remove the temp2 directory')

registtime() # regist current time
if __name__ == '__main__':
main()

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment télécharger Deepseek Xiaomi Comment télécharger Deepseek Xiaomi Feb 19, 2025 pm 05:27 PM

Comment télécharger Deepseek Xiaomi? Recherchez "Deepseek" dans le Xiaomi App Store. Identifiez vos besoins (fichiers de recherche, analyse des données) et recherchez les outils correspondants (tels que les gestionnaires de fichiers, les logiciels d'analyse des données) qui incluent les fonctions Deepseek.

Comment lui demandez-vous Deepseek Comment lui demandez-vous Deepseek Feb 19, 2025 pm 04:42 PM

La clé de l'utilisation efficace de Deepseek est de poser clairement des questions: exprimer les questions directement et spécifiquement. Fournir des détails spécifiques et des informations générales. Pour des demandes complexes, plusieurs angles et opinions de réfutations sont inclus. Concentrez-vous sur des aspects spécifiques, tels que les goulots d'étranglement des performances dans le code. Gardez une réflexion critique sur les réponses que vous obtenez et faites des jugements en fonction de votre expertise.

Comment rechercher Deepseek Comment rechercher Deepseek Feb 19, 2025 pm 05:18 PM

Utilisez simplement la fonction de recherche fournie avec Deepseek. Cependant, pour les recherches impopulaires, les dernières informations ou problèmes qui doivent être prises en compte, il est nécessaire d'ajuster les mots clés ou d'utiliser des descriptions plus spécifiques, de les combiner avec d'autres sources d'informations en temps réel et de comprendre que Deepseek n'est qu'un outil qui nécessite Stratégies de recherche actives, claires et raffinées.

Comment programmer Deepseek Comment programmer Deepseek Feb 19, 2025 pm 05:36 PM

Deepseek n'est pas un langage de programmation, mais un concept de recherche profonde. La mise en œuvre de Deepseek nécessite une sélection en fonction des langues existantes. Pour différents scénarios d'application, il est nécessaire de choisir la langue et les algorithmes appropriés et de combiner la technologie d'apprentissage automatique. La qualité du code, la maintenabilité et les tests sont cruciaux. Ce n'est qu'en choisissant le bon langage de programmation, les algorithmes et les bons outils en fonction de vos besoins et de l'écriture de code de haute qualité que Deepseek peut être mis en œuvre avec succès.

Comment utiliser Deepseek pour régler les comptes Comment utiliser Deepseek pour régler les comptes Feb 19, 2025 pm 04:36 PM

Question: Deepseek est-il disponible pour la comptabilité? Réponse: Non, il s'agit d'un outil d'exploration de données et d'analyse qui peut être utilisé pour analyser les données financières, mais elle n'a pas les fonctions de génération de comptabilité et de génération de rapports des logiciels comptables. L'utilisation de Deepseek pour analyser les données financières nécessite de l'écriture de code pour traiter les données avec une connaissance des structures de données, des algorithmes et des API profonds pour considérer les problèmes potentiels (par exemple, les connaissances en programmation, les courbes d'apprentissage, la qualité des données)

Comment accéder à Deepseekapi - Deepseekapi Access Call Tutoriel Comment accéder à Deepseekapi - Deepseekapi Access Call Tutoriel Mar 12, 2025 pm 12:24 PM

Explication détaillée de Deepseekapi Access and Call: Quick Start Guide Cet article vous guidera en détail comment accéder et appeler Deepseekapi, vous aidant facilement à utiliser des modèles d'IA puissants. Étape 1: Obtenez la clé de l'API pour accéder au site officiel Deepseek et cliquez sur la "plate-forme ouverte" dans le coin supérieur droit. Vous obtiendrez un certain nombre de jetons gratuits (utilisés pour mesurer l'utilisation de l'API). Dans le menu de gauche, cliquez sur "Apikeys" puis cliquez sur "Créer Apikey". Nommez votre apikey (par exemple, "test") et copiez immédiatement la clé générée. Assurez-vous d'enregistrer correctement cette clé, car elle ne sera affichée qu'une seule fois

Mise à jour majeure de Pi Coin: PI Bank arrive! Mise à jour majeure de Pi Coin: PI Bank arrive! Mar 03, 2025 pm 06:18 PM

Pinetwork est sur le point de lancer Pibank, une plate-forme bancaire mobile révolutionnaire! Pinetwork a publié aujourd'hui une mise à jour majeure sur Elmahrosa (face) Pimisrbank, appelée Pibank, qui intègre parfaitement les services bancaires traditionnels avec des fonctions de crypto-monnaie de pignon (prend en charge l'échange entre les Fiat Currency tels que le Dollar, l'Euro, Usdt, Usdc, Ripiah avec des crypto-monnaies. Quel est le charme de Pibank? Découvrons! Les principales fonctions de Pibank: gestion unique des comptes bancaires et des actifs de crypto-monnaie. Soutenez les transactions en temps réel et adoptez les biospécies

Quels sont les outils de découpage d'IA actuels ? Quels sont les outils de découpage d'IA actuels ? Nov 29, 2024 am 10:40 AM

Voici quelques outils de découpage d'IA populaires : TensorFlow DataSetPyTorch DataLoaderDaskCuPyscikit-imageOpenCVKeras ImageDataGenerator

See all articles