如何手动打开Python同时写入的文件?
How to manually open a file that Python is writing in simultaneously?
我有一个 python 代码执行一些计算,然后将输出写入 excel sheet 如下 -
# import the necessary packages
import numpy as np
import argparse
import time
import cv2
import os
from openpyxl import load_workbook
import pandas as pd
from datetime import date, datetime
filename = r'PathToDirectory\Data.xlsx'
def append_df_to_excel(filename, df, sheet_name='Sheet1', startrow=None,
truncate_sheet=False,
**to_excel_kwargs):
# ignore [engine] parameter if it was passed
if 'engine' in to_excel_kwargs:
to_excel_kwargs.pop('engine')
writer = pd.ExcelWriter(filename, engine='openpyxl')
# Python 2.x: define [FileNotFoundError] exception if it doesn't exist
try:
FileNotFoundError
except NameError:
FileNotFoundError = IOError
try:
# try to open an existing workbook
writer.book = load_workbook(filename)
# get the last row in the existing Excel sheet
# if it was not specified explicitly
if startrow is None and sheet_name in writer.book.sheetnames:
startrow = writer.book[sheet_name].max_row
# truncate sheet
if truncate_sheet and sheet_name in writer.book.sheetnames:
# index of [sheet_name] sheet
idx = writer.book.sheetnames.index(sheet_name)
# remove [sheet_name]
writer.book.remove(writer.book.worksheets[idx])
# create an empty sheet [sheet_name] using old index
writer.book.create_sheet(sheet_name, idx)
# copy existing sheets
writer.sheets = {ws.title:ws for ws in writer.book.worksheets}
except FileNotFoundError:
# file does not exist yet, we will create it
pass
if startrow is None:
startrow = 0
# write out the new sheet
df.to_excel(writer, sheet_name, startrow=startrow, **to_excel_kwargs, header = False, index=False)
# save the workbook
writer.save()
while(True):
# --------------------------------------------------------------
# -----------REST OF THE CODE AND COMPUTATION HERE--------------
# --------------------------------------------------------------
today = date.today()
today = today.strftime("%d/%m/%Y")
now = datetime.now()
now = now.strftime("%H:%M:%S")
rec_classes = list(set(classIDs))
for counting in range(len(rec_classes)):
my_label = LABELS[rec_classes[counting]]
my_count = classIDs.count(rec_classes[counting])
data_dict = ({'today_date' : [today], 'now_time' : [now], 'animal_class' : [my_label], 'animal_count' : my_count})
df = pd.DataFrame(data_dict)
append_df_to_excel(filename, df)
如果我想写入 excel sheet,代码工作正常,并且在代码具有 运行 之后,我可以打开文件并且所有内容都完美显示。
问题是我想在 运行ning 时打开 excel 文件。我希望看到添加的行和附加的数据作为代码 运行s。但是,每当我在代码为 运行ning 时打开 excel 文件,我都会收到 'Permission Denied' 错误,并且代码停止。
我尝试使用 except OSError pass 解决它,但没有帮助。
有什么可以做的吗?
不,没有直接的方法可以让 Excel 动态更新其对变化文件的显示。它从磁盘加载到内存一次,然后 Excel 忽略磁盘文件。
(如果你写了一个 Excel 宏来定期重新访问文件,也许你可以完成这个。但是朋友们不要让朋友使用 Excel 无论如何。)
我建议你两种可能的方式:
- 要在终端上打印您正在插入的数据,或者
- 使用 Python 的 logging 库,该库可用于将数据记录在文件中并全面了解正在发生的事情。您可以设置格式、日志记录的重要性级别、处理程序...这是一个很棒的工具,也可用于其他用途。
我有一个 python 代码执行一些计算,然后将输出写入 excel sheet 如下 -
# import the necessary packages
import numpy as np
import argparse
import time
import cv2
import os
from openpyxl import load_workbook
import pandas as pd
from datetime import date, datetime
filename = r'PathToDirectory\Data.xlsx'
def append_df_to_excel(filename, df, sheet_name='Sheet1', startrow=None,
truncate_sheet=False,
**to_excel_kwargs):
# ignore [engine] parameter if it was passed
if 'engine' in to_excel_kwargs:
to_excel_kwargs.pop('engine')
writer = pd.ExcelWriter(filename, engine='openpyxl')
# Python 2.x: define [FileNotFoundError] exception if it doesn't exist
try:
FileNotFoundError
except NameError:
FileNotFoundError = IOError
try:
# try to open an existing workbook
writer.book = load_workbook(filename)
# get the last row in the existing Excel sheet
# if it was not specified explicitly
if startrow is None and sheet_name in writer.book.sheetnames:
startrow = writer.book[sheet_name].max_row
# truncate sheet
if truncate_sheet and sheet_name in writer.book.sheetnames:
# index of [sheet_name] sheet
idx = writer.book.sheetnames.index(sheet_name)
# remove [sheet_name]
writer.book.remove(writer.book.worksheets[idx])
# create an empty sheet [sheet_name] using old index
writer.book.create_sheet(sheet_name, idx)
# copy existing sheets
writer.sheets = {ws.title:ws for ws in writer.book.worksheets}
except FileNotFoundError:
# file does not exist yet, we will create it
pass
if startrow is None:
startrow = 0
# write out the new sheet
df.to_excel(writer, sheet_name, startrow=startrow, **to_excel_kwargs, header = False, index=False)
# save the workbook
writer.save()
while(True):
# --------------------------------------------------------------
# -----------REST OF THE CODE AND COMPUTATION HERE--------------
# --------------------------------------------------------------
today = date.today()
today = today.strftime("%d/%m/%Y")
now = datetime.now()
now = now.strftime("%H:%M:%S")
rec_classes = list(set(classIDs))
for counting in range(len(rec_classes)):
my_label = LABELS[rec_classes[counting]]
my_count = classIDs.count(rec_classes[counting])
data_dict = ({'today_date' : [today], 'now_time' : [now], 'animal_class' : [my_label], 'animal_count' : my_count})
df = pd.DataFrame(data_dict)
append_df_to_excel(filename, df)
如果我想写入 excel sheet,代码工作正常,并且在代码具有 运行 之后,我可以打开文件并且所有内容都完美显示。
问题是我想在 运行ning 时打开 excel 文件。我希望看到添加的行和附加的数据作为代码 运行s。但是,每当我在代码为 运行ning 时打开 excel 文件,我都会收到 'Permission Denied' 错误,并且代码停止。 我尝试使用 except OSError pass 解决它,但没有帮助。
有什么可以做的吗?
不,没有直接的方法可以让 Excel 动态更新其对变化文件的显示。它从磁盘加载到内存一次,然后 Excel 忽略磁盘文件。
(如果你写了一个 Excel 宏来定期重新访问文件,也许你可以完成这个。但是朋友们不要让朋友使用 Excel 无论如何。)
我建议你两种可能的方式:
- 要在终端上打印您正在插入的数据,或者
- 使用 Python 的 logging 库,该库可用于将数据记录在文件中并全面了解正在发生的事情。您可以设置格式、日志记录的重要性级别、处理程序...这是一个很棒的工具,也可用于其他用途。