我写了一个代码,查询一个mongo数据库,并将结果写入一个文件。我的代码创建了这个文件并开始写入它成功。但是在多次迭代之后(不确定迭代次数是否固定),我得到了一个PermissionError。
我已经搜索过了,但我只找到了关于第一次尝试时出错的人的答案,因为他们没有权限。我会精确地说,我没有在我的电脑上做任何事情,在执行过程中,所以我真的不明白它是如何发生的。
以下是部分代码:
def query(self, query_date_part, query_actKey_part, filepath):
empty = True
print("0.0 %")
for i in range(len(query_date_part)):
query = {"dt": query_date_part[i], "actKey": query_actKey_part}
cursor = self.collection.find(query)
while cursor.alive:
try:
if empty:
with open(filepath, 'w') as fp:
json.dump(cursor.next(), fp, default=json_util.default)
empty = False
else:
append_to_json(filepath, cursor.next())
except StopIteration:
print("Stop Iteration")
print(str(round(float(i+1) / len(query_date_part) * 100, ndigits=2)) + " %")
return 0
def append_to_json(filepath, data):
"""
Append data in JSON format to the end of a JSON file.
NOTE: Assumes file contains a JSON object (like a Python dict) ending in '}'.
:param filepath: path to file
:param data: dict to append
"""
# construct JSON fragment as new file ending
new_ending = ", " + json.dumps(data, default=json_util.default)[1:-1] + "}\n"
# edit the file in situ - first open it in read/write mode
with open(filepath, 'r+') as f:
f.seek(0, 2) # move to end of file
index = f.tell() # find index of last byte
# walking back from the end of file, find the index
# of the original JSON's closing '}'
while not f.read().startswith('}'):
index -= 1
if index == 0:
raise ValueError("can't find JSON object in {!r}".format(filepath))
f.seek(index)
# starting at the original ending } position, write out
# the new ending
f.seek(index)
f.write(new_ending)`
部分输出:
6.75 %
Stop Iteration
6.76 %
Traceback (most recent call last):
File "C:/Users/username/PycharmProjects/mongodbtk/mquerytk.py", line 237, in <module>
mdbc.query(split_date(2017,5,6,1,0,2017,5,16,10,0,step=2), {"$in": ["aFeature"]}, 'test.json')
File "C:/Users/username/PycharmProjects/mongodbtk/mquerytk.py", line 141, in query
append_to_json(filepath, cursor.next())
File "C:/Users/username/PycharmProjects/mongodbtk/mquerytk.py", line 212, in append_to_json
with open(filepath, 'r+') as f:
PermissionError: [Errno 13] Permission denied: 'test.json'
Process finished with exit code 1
**注意:**文件大小在执行过程中会增加。当它崩溃它是大约300莫,我仍然有很多空间在我的硬盘驱动器,但也许文件的大小可以是一个问题?
**配置:**我使用Windows 7,Python 3.6,IDE为PyCharm Community Edition 2016.3.2
5条答案
按热度按时间k3bvogb11#
我也遇到了同样的问题,在测试之后,当试图太“频繁”地写入同一个文件时,似乎可能会有一些“bug”,每秒多次。我将提供一个非常小的代码片段,您可以使用它进行测试:
我认为代码是非常自我解释的。我得到的错误非常随机,有时它发生在~ 75次迭代之后,有时甚至可以达到~750,但看起来代码无法达到极限。因此,我建议您尝试多次写入更多数据,而不是经常写入少量数据。我希望能帮上忙。
jfewjypa2#
试试这个
nr9pn0ug3#
这似乎是一种竞争条件。创建一个助手函数,它执行与引发竞争条件的函数相同的任务,这对我来说是可行的。例如,如果一个代码块或函数A()正在创建一个竞态条件,那么我们可以通过再次调用另一个助手函数A_helper()来处理这个异常,它也做同样的事情。Python代码示例:
kqlmhetl4#
尝试使用
参见:Permission Eerrno13
rqdpfwrv5#
您的文件位于程序无法访问的位置。尝试将其移动到其他目录。或者你可能输入了错误的文件路径。我希望这对你有用!