最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

Python,超长文件名的解决方案

IT圈 admin 36浏览 0评论

Python,超长文件名的解决方案

这里写自定义目录标题

  • 今天用python,写一个批量移动文件的代码!

今天用python,写一个批量移动文件的代码!


大家看到了,将近900个项目,好几层的目录,一个项目一下面有50几张的照片,要把这些照片集中移动到第一层的目录下面。

最初我的代码是这样写的:

import os
from shutil import movepath_list = os.listdir('./qi')
for path in path_list:path_list1 = os.listdir('./qi/'+path)for path1 in path_list1:path_list2 = os.listdir('./qi/'+path+'/'+path1)for img in path_list2:png_list = os.listdir('./qi/'+path+'/'+path1+'/'+img)for png in png_list:oldfile = os.path.join('./qi'+'/'+path+'/'+path1+'/'+img+'/',png)newfile = os.path.join('./qi'+'/'+path+'/',png)move(oldfile,newfile)

目录有好几个层级,前面的 for 循环就不细述,感觉代码都没错。
运行后总是报错,FileNotFoundError: [WinError 3] 系统找不到指定的路径。
后面发现是文件名超过255位造成的。
最后的解决方法是将相对路径改为绝对路径,并在路径前方加上“\\?\”。

找了前辈的文章,摘要如下:
2、这个解决方法是想办法告诉电脑我的路径长度很长。首先我查询了windows下文件路径的最大长度是多少,查到的结果是260.这对于绝大多数情况都足够用了,但是文件路径长的问题还是存在的。然后就看到了UNC的定义,原来windows下的文件路径的长度最大可以是3万多的长度,具体多少记不清了哈哈哈。只要在绝对路径的前面加上“\\?\”就能告诉计算机我需要使用最大的路径长度,这样就不会出现路径太长而导致的无法操作的问题了。
引自:.html

怎么加“\\?\”这里没有说太清楚了
试了好几次,发现要加好多个\总算得到结果,代码如下供参考:

import os
from shutil import movepath_list = os.listdir('./qi')
#几次循环,获得藏在最底层目录的文件名
for path in path_list:path_list1 = os.listdir('./qi/'+path)for path1 in path_list1:path_list2 = os.listdir('./qi/'+path+'/'+path1)for img in path_list2:png_list = os.listdir('./qi/'+path+'/'+path1+'/'+img)for png in png_list:#获得绝对路径old_path = os.path.abspath('./qi'+'/'+path+'/'+path1+'/'+img+'/')new_path = os.path.abspath('./qi'+'/'+path+'/')#在绝对路径前加料,就可以识别了oldfile = os.path.join('\\\?\\'+old_path,png)newfile = os.path.join('\\\?\\'+new_path,png)move(oldfile,newfile)

以上心得体会,供大家参考!

Python,超长文件名的解决方案

这里写自定义目录标题

  • 今天用python,写一个批量移动文件的代码!

今天用python,写一个批量移动文件的代码!


大家看到了,将近900个项目,好几层的目录,一个项目一下面有50几张的照片,要把这些照片集中移动到第一层的目录下面。

最初我的代码是这样写的:

import os
from shutil import movepath_list = os.listdir('./qi')
for path in path_list:path_list1 = os.listdir('./qi/'+path)for path1 in path_list1:path_list2 = os.listdir('./qi/'+path+'/'+path1)for img in path_list2:png_list = os.listdir('./qi/'+path+'/'+path1+'/'+img)for png in png_list:oldfile = os.path.join('./qi'+'/'+path+'/'+path1+'/'+img+'/',png)newfile = os.path.join('./qi'+'/'+path+'/',png)move(oldfile,newfile)

目录有好几个层级,前面的 for 循环就不细述,感觉代码都没错。
运行后总是报错,FileNotFoundError: [WinError 3] 系统找不到指定的路径。
后面发现是文件名超过255位造成的。
最后的解决方法是将相对路径改为绝对路径,并在路径前方加上“\\?\”。

找了前辈的文章,摘要如下:
2、这个解决方法是想办法告诉电脑我的路径长度很长。首先我查询了windows下文件路径的最大长度是多少,查到的结果是260.这对于绝大多数情况都足够用了,但是文件路径长的问题还是存在的。然后就看到了UNC的定义,原来windows下的文件路径的长度最大可以是3万多的长度,具体多少记不清了哈哈哈。只要在绝对路径的前面加上“\\?\”就能告诉计算机我需要使用最大的路径长度,这样就不会出现路径太长而导致的无法操作的问题了。
引自:.html

怎么加“\\?\”这里没有说太清楚了
试了好几次,发现要加好多个\总算得到结果,代码如下供参考:

import os
from shutil import movepath_list = os.listdir('./qi')
#几次循环,获得藏在最底层目录的文件名
for path in path_list:path_list1 = os.listdir('./qi/'+path)for path1 in path_list1:path_list2 = os.listdir('./qi/'+path+'/'+path1)for img in path_list2:png_list = os.listdir('./qi/'+path+'/'+path1+'/'+img)for png in png_list:#获得绝对路径old_path = os.path.abspath('./qi'+'/'+path+'/'+path1+'/'+img+'/')new_path = os.path.abspath('./qi'+'/'+path+'/')#在绝对路径前加料,就可以识别了oldfile = os.path.join('\\\?\\'+old_path,png)newfile = os.path.join('\\\?\\'+new_path,png)move(oldfile,newfile)

以上心得体会,供大家参考!

发布评论

评论列表 (0)

  1. 暂无评论