解决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 相关文章推荐
Python3.0与2.X版本的区别实例分析
Aug 25 Python
理解Python中函数的参数
Apr 27 Python
Python基于Matplotlib库简单绘制折线图的方法示例
Aug 14 Python
python中lambda()的用法
Nov 16 Python
50行Python代码实现人脸检测功能
Jan 23 Python
python编辑用户登入界面的实现代码
Jul 16 Python
PyCharm设置每行最大长度限制的方法
Jan 16 Python
python 变量初始化空列表的例子
Nov 28 Python
python加密解密库cryptography使用openSSL生成的密匙加密解密
Feb 11 Python
Python生成器next方法和send方法区别详解
May 30 Python
python的json包位置及用法总结
Jun 21 Python
python中re模块知识点总结
Jan 17 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
编写Smarty插件在模板中直接加载数据的详细介绍
2013/06/26 PHP
PHP滚动日志的代码实现
2015/06/10 PHP
使用swoole 定时器变更超时未支付订单状态的解决方案
2019/07/24 PHP
xmlHTTP实例
2006/10/24 Javascript
javascript通过navigator.userAgent识别各种浏览器
2013/10/25 Javascript
让input框实现类似百度的搜索提示(基于jquery事件监听)
2014/01/31 Javascript
JavaScript简单获取页面图片原始尺寸的方法
2016/06/21 Javascript
20分钟打造属于你的Bootstrap站点
2016/07/27 Javascript
vue2.0使用Sortable.js实现的拖拽功能示例
2017/02/21 Javascript
详解基于vue-cli优化的webpack配置
2017/11/06 Javascript
详解JavaScript中的函数、对象
2019/04/01 Javascript
解决vue props传Array/Object类型值,子组件报错的情况
2020/11/07 Javascript
Node使用koa2实现一个简单JWT鉴权的方法
2021/01/26 Javascript
一文秒懂nodejs中的异步编程
2021/01/28 NodeJs
[02:05]2014DOTA2西雅图邀请赛 专访啸天mik夫妻档
2014/07/08 DOTA
[51:27]LGD vs Liquid 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/19 DOTA
Djang中静态文件配置方法
2015/07/30 Python
python动态加载包的方法小结
2016/04/18 Python
Selenium控制浏览器常见操作示例
2018/08/13 Python
python 输入一个数n,求n个数求乘或求和的实例
2018/11/13 Python
详解python多线程之间的同步(一)
2019/04/03 Python
tensorflow生成多个tfrecord文件实例
2020/02/17 Python
Python面向对象程序设计之类和对象、实例变量、类变量用法分析
2020/03/23 Python
Python多线程操作之互斥锁、递归锁、信号量、事件实例详解
2020/03/24 Python
10分钟入门CSS3 Animation
2018/12/25 HTML / CSS
英国电信商店:BT Shop
2019/12/17 全球购物
Athleta官网:购买女士瑜伽服、技术运动服和休闲运动服
2020/11/12 全球购物
商业房地产广告语
2014/03/13 职场文书
结婚喜宴主持词
2014/03/14 职场文书
学党史心得体会
2014/09/05 职场文书
一年级数学上册复习计划
2015/01/17 职场文书
整改通知书
2015/04/20 职场文书
小学四年级作文之最感动的一件事
2019/11/01 职场文书
OpenCV-Python实现轮廓的特征值
2021/06/09 Python
navicat 连接Ubuntu虚拟机的mysql的操作方法
2022/04/02 MySQL
Python实现日志实时监测的示例详解
2022/04/06 Python