解决Python保存文件名太长OSError: [Errno 36] File name too long


Posted in Python onMay 11, 2022

保存文件名太长OSError: [Errno 36] File name too lon

问题描述

安装

pip install python-docx

代码

from docx import Document
Document().save('{}.docx'.format('1' * 256))

报错 OSError: [Errno 36] File name too long

解决方案

Linux 和 Windows 文件名限制约为 255 个字符

def shorten_filename(filename, limit=100):
    """返回合适长度文件名,中间用...显示"""
    if len(filename) <= limit:
        return filename
    else:
        return filename[:int(limit / 2) - 3] + '...' + filename[len(filename) - int(limit / 2):]
filename = '{}.txt'.format('Lorem ipsum dolor sit amet, consectetur adipiscing elit' * 30)
print(filename)
print(shorten_filename(filename))
# Lorem ipsum dolor sit amet, consectetur adipiscing elitLorem ipsum dolor sit amet, consectetur adipiscing elitLorem ipsum dolor sit amet, consectetur adipiscing elitLorem ipsum dolor sit amet, consectetur adipiscing elitLorem ipsum dolor sit amet, consectetur adipiscing elitLorem ipsum dolor sit amet, consectetur adipiscing elitLorem ipsum dolor sit amet, consectetur adipiscing elitLorem ipsum dolor sit amet, consectetur adipiscing elitLorem ipsum dolor sit amet, consectetur adipiscing elitLorem ipsum dolor sit amet, consectetur adipiscing elitLorem ipsum dolor sit amet, consectetur adipiscing elitLorem ipsum dolor sit amet, consectetur adipiscing elitLorem ipsum dolor sit amet, consectetur adipiscing elitLorem ipsum dolor sit amet, consectetur adipiscing elitLorem ipsum dolor sit amet, consectetur adipiscing elitLorem ipsum dolor sit amet, consectetur adipiscing elitLorem ipsum dolor sit amet, consectetur adipiscing elitLorem ipsum dolor sit amet, consectetur adipiscing elitLorem ipsum dolor sit amet, consectetur adipiscing elitLorem ipsum dolor sit amet, consectetur adipiscing elitLorem ipsum dolor sit amet, consectetur adipiscing elitLorem ipsum dolor sit amet, consectetur adipiscing elitLorem ipsum dolor sit amet, consectetur adipiscing elitLorem ipsum dolor sit amet, consectetur adipiscing elitLorem ipsum dolor sit amet, consectetur adipiscing elitLorem ipsum dolor sit amet, consectetur adipiscing elitLorem ipsum dolor sit amet, consectetur adipiscing elitLorem ipsum dolor sit amet, consectetur adipiscing elitLorem ipsum dolor sit amet, consectetur adipiscing elitLorem ipsum dolor sit amet, consectetur adipiscing elit.txt
# Lorem ipsum dolor sit amet, consectetur adipiscing elitLorem ipsum dolor sit amet, consectetur adipiscing elitLorem ipsum do...ipiscing elitLorem ipsum dolor sit amet, consectetur adipiscing elitLorem ipsum dolor sit amet, consectetur adipiscing elit.txt

Python超长文件名解决

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

解决Python保存文件名太长OSError: [Errno 36] File name too long

解决Python保存文件名太长OSError: [Errno 36] File name too long

解决Python保存文件名太长OSError: [Errno 36] File name too long

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

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

import os
from shutil import move
path_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位造成的。

最后的解决方法是将相对路径改为绝对路径,并在路径前方加上“\\?\”。

找了前辈的文章,摘要如下:

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

怎么加“\\?\”这里没有说太清楚了

试了好几次,发现要加好多个\总算得到结果,代码如下供参考:

import os
from shutil import move
path_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自动格式化json文件的方法
Mar 11 Python
Python中的异常处理简明介绍
Apr 13 Python
详解Python3中的Sequence type的使用
Aug 01 Python
快速查询Python文档方法分享
Dec 27 Python
python requests爬取高德地图数据的实例
Nov 10 Python
python移位运算的实现
Jul 15 Python
Django在pycharm下修改默认启动端口的方法
Jul 26 Python
python模拟预测一下新型冠状病毒肺炎的数据
Feb 01 Python
Python基于pip实现离线打包过程详解
May 15 Python
使用pth文件添加Python环境变量方式
May 26 Python
基于opencv的selenium滑动验证码的实现
Jul 24 Python
Python 爬取淘宝商品信息栏目的实现
Feb 06 Python
Python 匹配文本并在其上一行追加文本
May 11 #Python
Python 一键获取电脑浏览器的账号密码
May 11 #Python
图神经网络GNN算法
May 11 #Python
python神经网络ResNet50模型
May 06 #Python
python和anaconda的区别
May 06 #Python
python神经网络Xception模型
May 06 #Python
Python使用永中文档转换服务
May 06 #Python
You might like
PHP+Ajax异步通讯实现用户名邮箱验证是否已注册( 2种方法实现)
2011/12/28 PHP
PHP中文字符串截断无乱码解决方法
2016/10/10 PHP
Laravel 自定命令以及生成文件的例子
2019/10/23 PHP
详解laravel passport OAuth2.0的4种模式
2019/11/04 PHP
gearman中任务的优先级和返回状态实例分析
2020/02/27 PHP
用js 让图片在 div或dl里 居中,底部对齐
2008/01/21 Javascript
javascript写的一个链表实现代码
2009/10/25 Javascript
JavaScript(JS) 压缩 / 混淆 / 格式化 批处理工具
2010/12/10 Javascript
如何让div span等元素能响应键盘事件操作指南
2012/11/13 Javascript
JavaScript实现快速排序(自已编写)
2012/12/19 Javascript
js实现单行文本向上滚动效果实例代码
2013/11/28 Javascript
jQuery找出网页上最高元素的方法
2015/03/20 Javascript
FullCalendar日历插件应用之数据展现(一)
2015/12/23 Javascript
Bootstrap富文本组件wysiwyg数据保存到mysql的方法
2016/05/09 Javascript
Bootstrap表单布局样式代码
2016/05/31 Javascript
vue-content-loader内容加载器的使用方法
2018/08/05 Javascript
详解如何模拟实现node中的Events模块(通俗易懂版)
2019/04/15 Javascript
Vue函数式组件-你值得拥有
2019/05/09 Javascript
vue+element实现表单校验功能
2019/05/20 Javascript
layui点击按钮页面会自动刷新的解决方案
2019/10/25 Javascript
js实现简单的贪吃蛇游戏
2020/04/23 Javascript
[03:02]生活中的Dendi之野外度假篇
2016/08/09 DOTA
Python3实现将文件归档到zip文件及从zip文件中读取数据的方法
2015/05/22 Python
Python应用03 使用PyQT制作视频播放器实例
2016/12/07 Python
利用python求相邻数的方法示例
2017/08/18 Python
matplotlib作图添加表格实例代码
2018/01/23 Python
python-Web-flask-视图内容和模板知识点西宁街
2019/08/23 Python
python smtplib发送多个email联系人的实现
2020/10/09 Python
英国豪华文具和皮具配件经典老品牌:Smythson(斯迈森)
2018/04/19 全球购物
探索欧洲最好的品牌:Bombinate
2019/06/14 全球购物
大学生毕业自我鉴定范文
2013/09/19 职场文书
体育之星事迹材料
2014/05/11 职场文书
烈士陵园观后感
2015/06/08 职场文书
学习经验交流会演讲稿
2015/11/02 职场文书
Redis延迟队列和分布式延迟队列的简答实现
2021/05/13 Redis
Python实现为PDF去除水印的示例代码
2022/04/03 Python