解决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自动发邮件脚本
Mar 31 Python
python爬虫正则表达式之处理换行符
Jun 08 Python
pandas 实现字典转换成DataFrame的方法
Jul 04 Python
Python 16进制与中文相互转换的实现方法
Jul 09 Python
Python 判断奇数偶数的方法
Dec 20 Python
详解python之heapq模块及排序操作
Apr 04 Python
python图形绘制奥运五环实例讲解
Sep 14 Python
在django中使用post方法时,需要增加csrftoken的例子
Mar 13 Python
python实现将两个文件夹合并至另一个文件夹(制作数据集)
Apr 03 Python
Python实现删除某列中含有空值的行的示例代码
Jul 20 Python
利用Python pandas对Excel进行合并的方法示例
Nov 04 Python
python 进制转换 int、bin、oct、hex的原理
Jan 13 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笔记之:AOP的应用
2013/04/24 PHP
PHP把数字转成人民币大写的函数分享
2014/06/30 PHP
php+xml编程之xpath的应用实例
2015/01/24 PHP
php实现QQ空间获取当前用户的用户名并生成图片
2015/07/25 PHP
PHP实现针对日期,月数,天数,周数,小时,分,秒等的加减运算示例【基于strtotime】
2017/04/19 PHP
Windows下php+mysql5.7配置教程
2017/05/16 PHP
JavaScript Base64编码和解码,实现URL参数传递。
2006/09/18 Javascript
Javascript获取CSS伪元素属性的实现代码
2014/09/28 Javascript
jQuery搜索同辈元素方法
2015/02/10 Javascript
PHPMyAdmin导入时提示文件大小超出PHP限制的解决方法
2015/03/30 Javascript
JavaScript中split() 使用方法汇总
2015/04/17 Javascript
js+css简单实现网页换肤效果
2015/12/29 Javascript
基于Bootstrap的UI扩展 StyleBootstrap
2016/06/17 Javascript
node.js express安装及示例网站搭建方法(分享)
2016/08/22 Javascript
简单实现jQuery多选框功能
2017/01/09 Javascript
js实现上下左右弹框划出效果
2017/03/08 Javascript
微信小程序WebSocket实现聊天对话功能
2018/07/06 Javascript
小程序视频列表中视频的播放与停止的示例代码
2018/07/20 Javascript
微信小程序中使用自定义图标(阿里icon)的方法
2018/08/20 Javascript
在JS循环中使用async/await的方法
2018/10/12 Javascript
Node.js EventEmmitter事件监听器用法实例分析
2019/01/07 Javascript
[02:23]1个至宝=115个英雄特效 最“绿”至宝拉比克“魔导师密钥”登场
2018/12/29 DOTA
python模块restful使用方法实例
2013/12/10 Python
python清除字符串里非数字字符的方法
2015/07/02 Python
python3 实现对图片进行局部切割的方法
2018/12/05 Python
Python写一个基于MD5的文件监听程序
2019/03/11 Python
python 画条形图(柱状图)实例
2020/04/24 Python
keras实现VGG16方式(预测一张图片)
2020/07/07 Python
Python3爬虫中关于Ajax分析方法的总结
2020/07/10 Python
python 批量下载bilibili视频的gui程序
2020/11/20 Python
Derek Rose官网:英国高档睡衣、家居服和内衣品牌
2020/01/18 全球购物
局部内部类是否可以访问非final变量?
2013/04/20 面试题
应聘医学检验人员自荐信
2013/09/27 职场文书
网络专业学生个人的自我评价
2013/12/16 职场文书
考核工作实施方案
2014/03/30 职场文书
阿里云国际版 使用Nginx作为HTTPS转发代理服务器
2022/05/11 Servers