【问题标题】:File exists error when trying to open it with open(filename,'x') - Windows case sensitivity problem with lower and uppercase尝试使用 open(filename,'x') 打开文件时存在错误 - Windows 大小写区分大小写问题
【发布时间】:2019-02-26 09:51:14
【问题描述】:

我在 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' :Open a file for exclusive creation. If the file already exists, the operation fails. 你可以在这里获得更多信息programiz.com/python-programming/file-operation。
  • 如果你想覆盖已经创建的文件,你可以使用'w'而不是'x'。或者您可以使用 'a' 附加到已经存在的文件内容。
  • 更多信息在这里:stackoverflow.com/a/23566951/365102
  • 你有正确的反应来编辑你的帖子! :)

标签: python naming


【解决方案1】:

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

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

您应该使用另一种模式,这里有一个有用的链接,指向对您有用的不同模式的说明

python open built-in function: difference between modes a, a+, w, w+, and r+?

编辑:显然你的错误是你不能用两种不同的大小写创建两个名称为L01A 和L01a 的文件,这是Windows 文件系统不区分大小写。您不能创建两个不同的文件。

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

根据此线程,您可能希望为所有子目录启用此功能,这是Apply setCaseSensitiveInfo recursively to all folders and subfolders 的一种方法。

感谢 Lalush 的帖子。

【讨论】:

  • 添加“x”只是为了显示明显的错误。如果我使用“w”,则带有“A”内容的“L01A.txt”文件会将其内容更改为“a”,并且不会创建第二个名为“L01a.txt”的文件。我想创建第二个文件,但无法识别 A 和 a 之间的差异。
  • @Lalush,更新了我的答案,如果你在 Windows 上,你应该启用区分大小写
  • 你说得对,我在 Windows 上。只需启用区分大小写即可。非常感谢!
  • @Lalush 我很高兴为您提供帮助 :)
  • 已经在命令 shell 中尝试了 fsutil.exe 命令,并且以这种方式工作。实际问题是它仅启用该目录的区分大小写,而不是我真正想要的后续子文件夹。我不是唯一一个遇到这个问题的人,这似乎是一个常见的 Windows 问题。在另一个线程中,这个问题似乎通过额外的电源外壳脚本stackoverflow.com/questions/51591091/… 解决了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-03
  • 2019-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多