python - 写入文件的问题导致 Errno 22
问题描述
我正在学习 python 和编程,在学习教程时遇到了导致 Errno 22 的问题。谢谢!
OSError: [Errno 22] Invalid argument: 'logs/2021-05-14 13:56:36.txt'
这是代码:
def Write_to_file(Date,net_worth,filename='{}.txt'.format(datetime.now().strftime("%Y-
%m-%d %H:%M:%S"))):
for i in net_worth:
Date += " {}".format(i)
#print(Date)
if not os.path.exists('logs'):
os.makedirs('logs')
file = open("logs/"+filename, 'a+')
file.write(Date+"\n")
file.close()
这是错误和回溯
Traceback (most recent call last):
File "C:\Users\Conor\Documents\GitHub\RL-Bitcoin-trading-bot\RL-Bitcoin-trading-bot_2\RL-
Bitcoin-trading-bot_2.py", line 176, in <module>
Random_games(test_env, visualize=True, train_episodes = 1, training_batch_size=300)
File "C:\Users\Conor\Documents\GitHub\RL-Bitcoin-trading-bot\RL-Bitcoin-trading-bot_2\RL-
Bitcoin-trading-bot_2.py", line 156, in Random_games
state, reward, done = env.step(action)
File "C:\Users\Conor\Documents\GitHub\RL-Bitcoin-trading-bot\RL-Bitcoin-trading-bot_2\RL-
Bitcoin-trading-bot_2.py", line 118, in step
Write_to_file(Date, self.orders_history[-1])
File "C:\Users\Conor\Documents\GitHub\RL-Bitcoin-trading-bot\RL-Bitcoin-trading-
bot_2\utils.py", line 27, in Write_to_file
file = open("logs/"+filename, 'a+')
OSError: [Errno 22] Invalid argument: 'logs/2021-05-14 13:56:36.txt'
[Finished in 2.9s with exit code 1]
[shell_cmd: python -u "C:\Users\Conor\Documents\GitHub\RL-Bitcoin-trading-bot\RL-Bitcoin-
trading-bot_2\RL-Bitcoin-trading-bot_2.py"]
[dir: C:\Users\Conor\Documents\GitHub\RL-Bitcoin-trading-bot\RL-Bitcoin-trading-bot_2]
[路径:C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPower Shell\v1.0;C:\WINDOWS\System32\OpenSSH;C:\ Program Files\Intel\WiFi\bin;C:\Program Files\Common Files\Intel\WirelessCommon;C:\Program Files (x86)\QuickTime\QTSystem;C:\Program Files (x86)\PuTTY;C:\Program Files\MATLAB\R2020b\bin;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files\NVIDIA Corporation\NVIDIA NvDLISR;C:\Users\Conor\AppData\Local\Programs\Python \Launcher;C:\Users\Conor\AppData\Local\Programs\Python\Python38-32\Scripts;C:\Users\Conor\AppData\Local\Programs\Python\Python38-32;C:\Users\Conor \AppData\Local\Microsoft\WindowsApps;C:\Users\Conor\AppData\Local\GitHubDesk top\bin]
解决方案
Windows 下的文件名中不允许使用冒号。
使用另一个字符来分隔这些时间分量。
此外,您filename=...
不会做您期望的事情,因为参数默认值仅在导入模块时评估一次。
您可能正在寻找
def Write_to_file(Date, net_worth, filename=None):
if not filename:
filename = "{}.txt".format(datetime.now().strftime("%Y-%m-%d %H-%M-%S"))
Date += " ".join(str(i) for i in net_worth)
os.makedirs("logs", exist_ok=True)
with open("logs/" + filename, "a+") as file:
print(Date, file=file)
推荐阅读
- vue.js - 使用 Vuetify 将标签中的内容居中
- javascript - Javascript 如何实现变量绑定?
- ruby-on-rails - 为什么 RSpec 会抛出 InvalidSignature 错误?
- hibernate - 如何使用 JPA Criteria Builder 编写带有附加计数列的查询
- javascript - 如何在电子中启用位置权限?
- php - 无法使用 php 从我的硬盘驱动器中找到文件
- c# - 如何在 Asp Net Core 3.1 Web API 中的派生类型列表上实现数据验证属性
- php - 会话 PHP 对象的安全问题
- git - 我输入“git branch”,但它什么也没做
- elasticsearch - Elasticsearch 在使用 Function score 进行显着术语聚合时会考虑喜欢