Я хочу отслеживать каталог и получать изменения в нем. Исследуя, я нашел ReadDirectoryChangesW и смог помочь мне с одним из инструментов, потому что открытие и закрытие файла приводило к обновлению этого CSV-файла, и он мог читать этот файл снова и снова, пока не был создан другой.
results = win32file.ReadDirectoryChangesW(
hDir,
1024,
True,
win32con.FILE_NOTIFY_CHANGE_FILE_NAME |
win32con.FILE_NOTIFY_CHANGE_DIR_NAME |
win32con.FILE_NOTIFY_CHANGE_ATTRIBUTES |
win32con.FILE_NOTIFY_CHANGE_SIZE |
win32con.FILE_NOTIFY_CHANGE_LAST_WRITE |
win32con.FILE_NOTIFY_CHANGE_SECURITY,
None,
None
)
for action, file in results: # Get events that happened
if action == 1 or 3: # If file is created or updated
full_path = os.path.join(self.directory, file) # Set full_path to that files path
if action == 1:
self.log.info('CCN File Changed: %s', file)
data = rd().read_ccn(full_path) # Read full path
table_query(data[0], data[1]) # Query dataframe #1: Dataframe #2:Schema #3:Table
Сейчас я пытаюсь сделать то же самое с другим инструментом и другой процедурой чтения, но на этот раз чтение файла не приводит к обновлению для чтения. Мне нужно читать последний файл, который обновляется снова и снова, пока прибор не сгенерирует следующий файл. Дело в том, что прибор генерирует папку для дня, затем генерирует папку для последующих запусков этого дня, а затем в этой папке находятся различные файлы, и я хочу прочитать только один тип файла, поэтому я сделал это.
while 1:
# ReadDirectoryChangesW takes a previously-created
# handle to a directory, a buffer size for results,
# a flag to indicate whether to watch subtrees and
# a filter of what changes to notify.
results = win32file.ReadDirectoryChangesW(
hDir,
10024, #Rise if not getting events
True,
win32con.FILE_NOTIFY_CHANGE_FILE_NAME |
win32con.FILE_NOTIFY_CHANGE_DIR_NAME |
win32con.FILE_NOTIFY_CHANGE_ATTRIBUTES |
win32con.FILE_NOTIFY_CHANGE_SIZE |
win32con.FILE_NOTIFY_CHANGE_LAST_WRITE |
win32con.FILE_NOTIFY_CHANGE_SECURITY,
None,
None
)
for action, file in results:
if action == 1 or 3:
full_path = os.path.join(self.directory, file)
if file.endswith('.h5'):
print action, file
lista.append(file)
#data = rd().read_neo(full_path)
#table_query(data[0], data[1])
#time.sleep(0.5)
print lista
Это частично работает. Он получает последнее обновление, когда программное обеспечение прибора закрывает файл и создает новый. Но я не могу заставить его продолжать читать последний, пока он не получит обновление las и снова новое.