我有一个工具,每天晚上11点将新文件添加到Unix服务器文件夹中。 我想编写一个python脚本,将于晚上11点30分发布,它会在这个文件夹中找到新文件,删除的文件和修改后的文件。 这些文件具有唯一的名称“123456_0.csv,123456_1.csv”。 由于脚本将手动启动,因此我不想使用繁忙的等待模式。 我只想使用python库。如何用python 3.x在一个文件夹中找到新的/已更改/已删除的文件
谢谢。
在以下几行我的代码(我是新来的Python):
def F_CreateArchive(Time_stamp, Added_Filename, Aux_Filename, Field_Names, File_Extension):
if not os.path.exists(Added_Filename):
with open(Added_Filename, 'w', newline='') as arch:
archive_write = csv.DictWriter(arch, fieldnames=Field_Names, delimiter=';')
archive_write.writeheader()
folder_files = glob.glob(File_Extension)
for each_folder_file in folder_files:
md5file = hashlib.md5(open(each_folder_file,'rb').read()).hexdigest()
archive_write.writerow({'TIMESTAMP': Time_stamp, 'FILENAME': each_folder_file, 'ACTION': 'added', 'MD5': md5file})
return 0
def F_CheckAdded(Time_stamp, Added_Filename, Aux_Filename, Field_Names, File_Extension):
dict_added_archive = {}
dict_folder_file = {}
folder_files = glob.glob(file_extension)
for each_file in folder_files:
with open(each_file, 'rb') as file:
dict_folder_file[each_file] = hashlib.md5(file.read()).hexdigest()
with open(Added_Filename, 'r') as addfile:
added_read = csv.DictReader(addfile, delimiter=";")
for row in added_read:
if(row['FILENAME'] != ''):
dict_added_archive[row['FILENAME']] = row['MD5']
addfile.seek(0)
print(dict_folder_file)
print(dict_added_archive)
with open(Aux_Filename, 'w', newline='') as aux, open(Added_Filename, 'r') as addfile:
added_read = csv.DictReader(addfile, delimiter=";")
aux_write = csv.DictWriter(aux, fieldnames=Field_Names, delimiter=';')
aux_write.writeheader()
for filename_folder, md5_folder in dict_folder_file.items():
if filename_folder in dict_added_archive and md5_folder == dict_added_archive[filename_folder]:
print('The file %s hasn\'t been changed.' %filename_folder)
for row in added_read:
if(row['FILENAME'] == filename_folder):
aux_write.writerow(row)
addfile.seek(0)
elif filename_folder in dict_added_archive and md5_folder != dict_added_archive[filename_folder]:
print('The file %s has been modified.' %filename_folder)
aux_write.writerow({'TIMESTAMP': Time_stamp, 'FILENAME': filename_folder, 'ACTION': 'added', 'MD5': md5_folder})
elif filename_folder not in dict_added_archive:
print('The file %s is new.' %filename_folder)
aux_write.writerow({'TIMESTAMP': Time_stamp, 'FILENAME': filename_folder, 'ACTION': 'added', 'MD5': md5_folder})
for filename_archive, md5_archive in dict_added_archive.items():
if filename_archive not in dict_folder_file:
print('The file %s has been removed.' %filename_folder)
aux_write.writerow({'TIMESTAMP': Time_stamp, 'FILENAME': filename_archive, 'ACTION': 'removed', 'MD5': md5_archive})
看起来你要我们写一些代码给你。尽管许多用户愿意为遇险的编码人员编写代码,但他们通常只在海报已尝试自行解决问题时才提供帮助。证明这一努力的一个好方法是包含迄今为止编写的代码,示例输入(如果有的话),期望的输出以及实际获得的输出(控制台输出,回溯等)。您提供的细节越多,您可能会收到的答案就越多。检查[FAQ]和[问]。 – MooingRawr
UNIX有哪些风味?在Linux上,你可以使用'pynotify':https://pypi.python.org/pypi/py-notify/0.3.1 – cdarke
我想避免pynotify。 – Rozmol