Python OSError:[Errno 22]无效参数:
我用Python从一个站点上抓取了很多评论,每次评论我都调用“review”函数,然后打开文件并将其附加到其中。它工作了一段时间,但是每次我都会出现以下错误,而不是在同一次检查中 OSError:[Errno 22]参数无效 我尝试了json.dumps:Python OSError:[Errno 22]无效参数:,python,json,Python,Json,我用Python从一个站点上抓取了很多评论,每次评论我都调用“review”函数,然后打开文件并将其附加到其中。它工作了一段时间,但是每次我都会出现以下错误,而不是在同一次检查中 OSError:[Errno 22]参数无效 我尝试了json.dumps: scraped_data = reviews(line) with open('reviews','a' ) as f: f.write(json.dumps(scraped_data,f,indent = 4)) Tracebac
scraped_data = reviews(line)
with open('reviews','a' ) as f:
f.write(json.dumps(scraped_data,f,indent = 4))
Traceback (most recent call last):
File "s.py", line 202, in <module>
with open('reviews','a' ) as f:
OSError: [Errno 22] Invalid argument: 'reviews'
但同样的错误不断出现。我还尝试了json.dump:
scraped_data = reviews(line)
with open('reviews','a' ) as f:
json.dump(scraped_data,f,indent = 4))
Traceback (most recent call last):
File "s.py", line 203, in <module>
json.dump(scraped_data,f,indent = 4)
OSError: [Errno 22] Invalid argument: 'reviews'
而且,出于某种原因,我也试着不缩进
编辑:json.dumps的完整回溯:
scraped_data = reviews(line)
with open('reviews','a' ) as f:
f.write(json.dumps(scraped_data,f,indent = 4))
Traceback (most recent call last):
File "s.py", line 202, in <module>
with open('reviews','a' ) as f:
OSError: [Errno 22] Invalid argument: 'reviews'
回溯(最近一次呼叫最后一次):
文件“s.py”,第202行,在
以open('reviews','a')作为f:
OSError:[Errno 22]无效参数:“审阅”
json.dump的完整回溯:
scraped_data = reviews(line)
with open('reviews','a' ) as f:
json.dump(scraped_data,f,indent = 4))
Traceback (most recent call last):
File "s.py", line 203, in <module>
json.dump(scraped_data,f,indent = 4)
OSError: [Errno 22] Invalid argument: 'reviews'
回溯(最近一次呼叫最后一次):
文件“s.py”,第203行,在
dump(刮取的_数据,f,缩进=4)
OSError:[Errno 22]无效参数:“审阅”
尝试为其提供文件的完整路径
确保您有在该目录中写入的权限(无论应用程序在哪个用户下运行)
此外,如果文件不存在,则无法附加到该文件。。。尝试a+
加号表示如果不存在,则创建它尝试为其提供文件的完整路径 确保您有在该目录中写入的权限(无论应用程序在哪个用户下运行) 此外,如果文件不存在,则无法附加到该文件。。。尝试
a+
加号意味着如果它不存在,那么创建它为什么不将文件作为变量打开
f = open("reviews", "a")
f.write(json.dumps(scraped_data,f,indent = 4))
f.close()
为什么不将文件作为变量打开
f = open("reviews", "a")
f.write(json.dumps(scraped_data,f,indent = 4))
f.close()
在Windows 10上 我注意到我的代码中有同样的行为,我发现我使用的是导致相同错误的Microsoft OneDrive。我试图打开的文件的文件指针在Windows资源管理器中可见,但内容不可见。您是否正在使用云文件共享服务
(我用鼠标右键单击该文件,选择“始终保持在此设备上”,再次运行相同的代码,代码正常工作)。在Windows 10上 我注意到我的代码中有同样的行为,我发现我使用的是导致相同错误的Microsoft OneDrive。我试图打开的文件的文件指针在Windows资源管理器中可见,但内容不可见。您是否正在使用云文件共享服务
(我右键单击了文件,选择了“始终保持在此设备上”,再次运行了相同的代码,并且运行正常)。您介意分享完整的回溯吗?是的,我编辑了问题我相信这需要进一步调试,因为看起来问题不在于将转储写入文件,而在于首先转储刮取的数据,请尝试打印刮取的数据以找出问题的原因。您正在运行的确切Linux是什么?Errno 22可能具有平台相关的含义。我建议运行
man2open
,并阅读EINVAL
消息的说明。我提出的最好的理论是O_APPEND
('a'
)在您的系统上不知何故受到了严重的支持。尝试使用('w'
),这将覆盖文件,但如果这样做有效,那么我们知道问题出在'a'
。我突然想到另一个想法:您是使用多线程还是多处理,还是从其他程序查看此文件?所有模糊bug的根源都是并发;)你介意分享完整的回溯吗?是的,我编辑了这个问题我相信这需要进一步的调试,因为看起来,问题不在于将转储写入文件,而是要首先转储刮取的数据,请尝试打印刮取的数据以找出问题的原因。你正在运行的确切Linux是什么?Errno 22可能具有平台相关的含义。我建议运行man2open
,并阅读EINVAL
消息的说明。我提出的最好的理论是O_APPEND
('a'
)在您的系统上不知何故受到了严重的支持。尝试使用('w'
),这将覆盖文件,但如果这样做有效,那么我们知道问题出在'a'
。我突然想到另一个想法:您是使用多线程还是多处理,还是从其他程序查看此文件?所有模糊bug的根源都是并发;)我试过了,至少在macOS和Debian上,“a”可以很好地创建新文件…:耸耸肩:说“+”是用来读写的,但不管怎样…你是对的@AndrewMorozko如果不是其中之一,那么他们就有一个与路径或权限相关的错误。是的,没有权限的问题,尽管这方面有很多问题。我们不能都同意errno机制是一个很好的解决方案吗?它从来没有发生过令人困惑的事情!我尝试了完整路径和“a+”,但没有成功:(我会尝试上面的方法,我尝试过,至少在macOS和Debian上,“+”可以很好地创建新文件…:耸耸肩:说“+”用于读写,但不管怎样……你是对的@AndrewMorozko如果不是其中之一,那么他们就有一个与路径或权限相关的错误。是的,权限不是一回事,尽管不是下面是关于这一点的EACCES
。我们难道不能都同意errno机制是一个很好的解决方案吗?它从来没有发生过任何混乱!我尝试了完整路径和“a+”但它不起作用:(我将尝试上述方法您能解释一下这将如何解决OPs问题吗?使用上下文管理器来处理打开和关闭文件是普遍存在的。这不会改变对open
的调用,从而产生错误,但如果出现问题,将无法关闭文件描述符。您能解释一下这将如何解决OPs问题吗lem?使用上下文管理器处理打开和关闭文件是普遍存在的。这不会改变对open
的调用,从而产生错误,但如果出现错误,将无法关闭文件描述符。