尝试使用 open(filename,'x') 打开文件时出现“文件已存在”错误 - Windows大小写敏感问题。

3

我在使用Windows系统,但是我的目录中没有任何文件。

我很难理解为什么会这样:

fid = open('L01A.txt', 'x')
fid.write('A') 
fid.close()

fid = open('L01a.txt', 'x')
fid.write('a')
fid.close()

提示我:

[Errno 17] 文件已存在:'L01a.txt'。


'x':打开一个文件进行独占式创建。如果文件已经存在,则操作失败。您可以在此处获取更多信息:https://www.programiz.com/python-programming/file-operation。 - Rahil Hastu
如果你想覆盖已经创建的文件,可以使用'w'。或者你可以使用'a'来追加到已经存在的文件内容中。 - Rahil Hastu
更多信息请参见:https://dev59.com/0mQo5IYBdhLWcg3wQNX4#23566951 - Mateen Ulhaq
你有正确的反应来编辑你的帖子! :) - BlueSheepToken
1个回答

5

您使用模式“x”打开文件,该模式仅用于创建文件。来自文档的说明:

'x',用于独占创建,如果文件已经存在则失败

您应该使用另一种模式,这是一个有用的链接,介绍了不同模式的描述,可能对您有帮助

python open内置函数:模式a、a+、w、w+和r+之间的区别?

编辑:显然您的错误是无法创建两个具有名称L01AL01a的文件,这是因为Windows文件系统不区分大小写。您无法创建两个不同的文件。

如果您绝对需要区分大小写,则可以在目录中启用NTFS以进行设置,启动管理员powershell并执行fsutil.exe file setCaseSensitiveInfo C:\folder enable

根据此线程,您可能希望将其应用于所有子目录,以下是一种方法递归地将setCaseSensitiveInfo应用于所有文件夹和子文件夹。感谢Lalush提供的线程。

“x”只是为了显示一个不同的错误而添加的。如果我使用“w”,则文件“L01A.txt”的内容“A”将更改为“a”,而不会创建名为“L01a.txt”的第二个文件。我想创建第二个文件,但是无法识别A和a之间的区别。 - Lalush
1
@Lalush,我更新了我的答案,如果你在使用Windows系统,你应该启用大小写敏感。 - BlueSheepToken
1
你说得对,我正在使用Windows。只是启用了大小写敏感性,现在它可以工作了。非常感谢! - Lalush
@Lalush 我很高兴能帮助 :) - BlueSheepToken
已经尝试在命令行中使用fsutil.exe命令,并且以这种方式工作。实际问题是它只为该目录启用了大小写敏感性,而不是后续的子文件夹,这正是我想要的。我不是唯一遇到这个问题的人,这似乎是一个常见的Windows问题。在另一个线程中,通过额外的PowerShell脚本解决了这个问题。https://dev59.com/YVUK5IYBdhLWcg3wlQ2u - Lalush

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接