Python Windows无法使用无效字符的stat文件

Python Windows无法使用无效字符的stat文件,第1张

概述我正在尝试制作一个快速的Python脚本来重命名一堆文件.这些文件是在这个NTFS驱动器上的Linux系统中制作的,但我现在在Windows上.命名约定如下所示:Screenshot at 2016-12-11 21:12:56.png :字符在Windows文件名中是非法的,因此这个脚本的行为对我来说有点奇怪.for i in os.listdir('.'

我正在尝试制作一个快速的Python脚本来重命名一堆文件.这些文件是在这个NTFS驱动器上的linux系统中制作的,但我现在在windows上.命名约定如下所示:

Screenshot at 2016-12-11 21:12:56.png

:字符在windows文件名中是非法的,因此这个脚本的行为对我来说有点奇怪.

for i in os.Listdir("."):    print(i)    x = i.replace(":","-")    comm = """mv "{}" "{}" """.format(i,x)    os.system(comm)

在上面的代码中,print(i)愉快地打印文件名.但是,当我尝试运行os.system(comm)来重命名我的文件时,我收到此错误:

mv: cannot stat ‘Screenshot at 2016-12-24 14:54:57.png’: No such file or directory

首先,我觉得有点奇怪,windows下的Python可以告诉这些顽皮的文件存在,但是无法实际移动它们.其次,解决这个问题的最佳方法是什么?

我也试过shutil.move()和os.rename()没有运气. This SO问题似乎在讨论这个问题,但似乎更关心预防而不是修复它.我显然可以切换回linux并修复它,但我想知道我是否无法在windows上修复它.最佳答案您可以找到它们,因为它们位于目录中.您无法访问它们,因为冒号符号在路径中的解析方式不同.这意味着包括Movefile在内的常用路径功能无法访问文件.您基本上有两个选择:查找不依赖于名称的方法,如OpenfileByID,或查找文件的备用名称,如dir / x.后者为您提供短名称(8.3),不应包含任何冒号.我不知道是否有从Python访问这些名称的就绪函数,所以最短的清除(对我来说)解决方法是执行dir / x并解析其输出.

我认为paths relative to directory descriptors与Python的标准库一样接近第一种方法,但我不知道它是否足够.底层的FindFirstfile / FindNextfile函数确实在WIN32_FIND_DATA(cfilename和cAlternatefilename)中生成两个名称,但Python期望第一个名称有效.这两种方法在PowerShell中也是有意义的,但看起来它完全不知道短名称,并且还按名称跟踪文件,而不是ID.否则FileInfo.MoveTo会巧妙地完成这个伎俩.

为了首先防止这种情况,ntfs-3g支持windows_names选项.这会导致它在尝试创建文件时犹豫不决.

结论:如https://superuser.com/questions/31587/how-to-force-windows-to-rename-a-file-with-a-special-character所述,没有明确的解决方案.我在那里讨论了所有尝试过的方法(以及其他一些方法).可能最不凌乱的选择是再次在linux中挂载磁盘并从那里重命名;文件系统技术上已损坏,因为字符无效,但Microsoft的修复解决方案是删除,而不是重命名.

Cygwin只使用私有unicode字符(‘:’0xf000)来模拟冒号.

总结

以上是内存溢出为你收集整理的Python Windows无法使用无效字符的stat文件全部内容,希望文章能够帮你解决Python Windows无法使用无效字符的stat文件所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1206221.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存