解决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 import自定义模块方法
Feb 12 Python
用Python中的字典来处理索引统计的方法
May 05 Python
Python实现将MySQL数据库表中的数据导出生成csv格式文件的方法
Jan 11 Python
python用户管理系统
Mar 13 Python
使用pandas将numpy中的数组数据保存到csv文件的方法
Jun 14 Python
python使用Qt界面以及逻辑实现方法
Jul 10 Python
python实现飞机大战小游戏
Nov 08 Python
浅谈python之自动化运维(Paramiko)
Jan 31 Python
使用Keras预训练模型ResNet50进行图像分类方式
May 23 Python
Scrapy基于scrapy_redis实现分布式爬虫部署的示例
Sep 29 Python
python装饰器代码深入讲解
Mar 01 Python
Django 如何实现文件上传下载
Apr 08 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
实现dedecms全站URL静态化改造的代码
2007/03/29 PHP
PHPMailer安装方法及简单实例
2008/11/25 PHP
PHP开发环境配置(MySQL数据库安装图文教程)
2010/04/28 PHP
PHP获取短链接跳转后的真实地址和响应头信息的方法
2014/07/25 PHP
从父页面读取和操作iframe中内容方法
2009/07/25 Javascript
输入自动提示搜索提示功能的javascript:sugggestion.js
2013/09/02 Javascript
JavaScript更改字符串的大小写
2015/05/07 Javascript
分享自己用JS做的扫雷小游戏
2016/02/17 Javascript
js数组与字符串常用方法总结
2017/01/13 Javascript
基于bootstrap实现多个下拉框同时搜索功能
2017/07/19 Javascript
Angular客户端请求Rest服务跨域问题的解决方法
2017/09/19 Javascript
详解ionic本地相册、拍照、裁剪、上传(单图完全版)
2017/10/10 Javascript
bootstrap 弹出框modal添加垂直方向滚轴效果
2018/07/09 Javascript
webpack的pitching loader详解
2019/09/23 Javascript
解决layui-table单元格设置为百分比在ie8下不能自适应的问题
2019/09/28 Javascript
详解vue中在循环中使用@mouseenter 和 @mouseleave事件闪烁问题解决方法
2020/04/07 Javascript
html中创建并调用vue组件的几种方法汇总
2020/11/17 Javascript
Python删除空文件和空文件夹的方法
2015/07/14 Python
Python中 Lambda表达式全面解析
2016/11/28 Python
详解appium+python 启动一个app步骤
2017/12/20 Python
Python+树莓派+YOLO打造一款人工智能照相机
2018/01/02 Python
对Python3中的input函数详解
2018/04/22 Python
python迭代dict的key和value的方法
2018/07/06 Python
详解python 爬取12306验证码
2019/05/10 Python
python文件操作的简单方法总结
2019/11/07 Python
python实现简单的购物程序代码实例
2020/03/03 Python
使用html5制作loading图的示例
2014/04/14 HTML / CSS
Pureology官网:为染色头发打造最好的产品
2019/09/13 全球购物
《最大的“书”》教学反思
2014/02/14 职场文书
上课打牌的检讨书
2014/02/15 职场文书
考试作弊检讨书大全
2014/02/18 职场文书
机关单位人员学雷锋心得体会
2014/03/10 职场文书
学员自我鉴定
2014/03/19 职场文书
营销部内勤岗位职责
2014/04/30 职场文书
2019年农民幸福观调查的实践感悟
2019/12/19 职场文书
Android studio 简单计算器的编写
2022/05/20 Java/Android