網站首頁 編程語言 正文
保存文件名太長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,寫一個批量移動文件的代碼!
大家看到了,將近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)
原文鏈接:https://xercis.blog.csdn.net/article/details/123395831
相關推薦
- 2022-11-16 生產redisson延時隊列不消費問題排查解決_Redis
- 2023-02-10 Redis如何正確關閉和開啟持久化_Redis
- 2022-08-25 Python中的基本數據類型介紹_python
- 2022-08-08 Android實現頁面跳轉_Android
- 2023-03-13 Python實現柵欄密碼的加密解密方法詳解_python
- 2023-01-31 C#實現批量壓縮和解壓縮的示例代碼_C#教程
- 2022-05-25 ASP.NET?Core中使用Redis實現緩存_實用技巧
- 2022-06-07 淺談Python中對象是如何被調用的_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支