解决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 相关文章推荐
win7安装python生成随机数代码分享
Dec 27 Python
python实现猜数字游戏(无重复数字)示例分享
Mar 29 Python
Python提示[Errno 32]Broken pipe导致线程crash错误解决方法
Nov 19 Python
玩转python爬虫之cookie使用方法
Feb 17 Python
Python max内置函数详细介绍
Nov 17 Python
itchat接口使用示例
Oct 23 Python
[原创]Python入门教程4. 元组基本操作
Oct 31 Python
pthon贪吃蛇游戏详细代码
Jan 27 Python
Pytorch 的损失函数Loss function使用详解
Jan 02 Python
python函数调用,循环,列表复制实例
May 03 Python
python实现猜单词游戏
May 22 Python
Python reversed反转序列并生成可迭代对象
Oct 22 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 数据库树的遍历方法
2009/02/06 PHP
php实现字符串首字母转换成大写的方法
2015/03/17 PHP
YII使用url组件美化管理的方法
2015/12/28 PHP
PHP实现163邮箱自动发送邮件
2016/03/29 PHP
Laravel 5.5 异常处理 &amp; 错误日志的解决
2019/10/17 PHP
JQuery 技巧和窍门整理(8个)
2010/04/22 Javascript
JS+ACTIVEX实现网页选择本地目录路径对话框
2013/03/18 Javascript
js游戏人物上下左右跑步效果代码分享
2015/08/28 Javascript
jQuery实现点击按钮弹出可关闭层的浮动层插件
2015/09/19 Javascript
浅析jQuery事件之on()方法绑定多个选择器,多个事件
2016/04/27 Javascript
jQuery实现的图片轮播效果完整示例
2016/09/12 Javascript
微信小程序 生命周期详解
2016/10/12 Javascript
半个小时学json(json传递示例)
2016/12/25 Javascript
jQuery EasyUI 页面加载等待及页面等待层
2017/02/06 Javascript
微信小程序wx.getImageInfo()如何获取图片信息
2018/01/26 Javascript
Vue2.0系列之过滤器的使用
2018/03/01 Javascript
Canvas实现微信红包照片效果
2018/08/21 Javascript
用Vue编写抽象组件的方法
2019/05/06 Javascript
在微信小程序中使用vant的方法
2019/06/07 Javascript
Vue关于组件化开发知识点详解
2020/05/13 Javascript
javascript递归函数定义和用法示例分析
2020/07/22 Javascript
js实现幻灯片轮播图
2020/08/14 Javascript
python导出hive数据表的schema实例代码
2018/01/22 Python
Python3读取Excel数据存入MySQL的方法
2018/05/04 Python
分析运行中的 Python 进程详细解析
2019/06/22 Python
Pycharm连接远程服务器并实现远程调试的实现
2019/08/02 Python
Python3+Selenium+Chrome实现自动填写WPS表单
2020/02/12 Python
html5 视频播放解决方案
2016/11/06 HTML / CSS
我的求职计划书
2014/01/10 职场文书
服务承诺书格式
2014/05/21 职场文书
投标服务承诺书
2014/05/28 职场文书
拾金不昧感谢信范文
2015/01/21 职场文书
客户经理岗位职责
2015/01/31 职场文书
python 统计代码耗时的几种方法分享
2021/04/02 Python
详解MySQL 联合查询优化机制
2021/05/10 MySQL
Mac电脑OS系统下安装Nginx的详细教程
2022/04/14 Servers