首页 > 解决方案 > 写入文件的问题导致 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]

标签: python

解决方案


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)

推荐阅读