解決Python保存文件名太長OSError: [Errno 36] File name too lon
保存文件名太長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.txtPython超長文件名解決
今天用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 循環(huán)就不細(xì)述,感覺代碼都沒錯。
運行后總是報錯,F(xiàn)ileNotFoundError: [WinError 3] 系統(tǒng)找不到指定的路徑。
后面發(fā)現(xiàn)是文件名超過255位造成的。
最后的解決方法是將相對路徑改為絕對路徑,并在路徑前方加上“\\?\”。
找了前輩的文章,摘要如下:
- 這個解決方法是想辦法告訴電腦我的路徑長度很長。首先我查詢了windows下文件路徑的最大長度是多少,查到的結(jié)果是260.這對于絕大多數(shù)情況都足夠用了,但是文件路徑長的問題還是存在的。
- 然后就看到了UNC的定義,原來windows下的文件路徑的長度最大可以是3萬多的長度,具體多少記不清了哈哈哈。
- 只要在絕對路徑的前面加上“\\?\”就能告訴計算機我需要使用最大的路徑長度,這樣就不會出現(xiàn)路徑太長而導(dǎo)致的無法操作的問題了。
怎么加“\\?\”這里沒有說太清楚了
試了好幾次,發(fā)現(xiàn)要加好多個\總算得到結(jié)果,代碼如下供參考:
import os
from shutil import move
path_list = os.listdir('./qi')
#幾次循環(huán),獲得藏在最底層目錄的文件名
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)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
- Python成功解決讀文件出現(xiàn):IOError:?[Errno?0]?Error的錯誤
- Python報錯:OSError:?[Errno?22]?Invalid?argument解決方案及應(yīng)用實例
- 解決python訓(xùn)練模型報錯:BrokenPipeError:?[Errno?32]?Broken?pipe
- 解決Python獲取文件提示找不到指定路徑can‘t?open?file?'area.py':[Errno?2]?No?such?file?or?directory
- python錯誤提示:Errno?2]?No?such?file?or?directory的解決方法
- 如何解決Python:報錯[Errno 2]No such file or directory問題
相關(guān)文章
python接口自動化測試數(shù)據(jù)和代碼分離解析
代碼的可維護性除了代碼冗余之外還有就是數(shù)據(jù)盡量不要和代碼摻雜在一起,因為閱讀起來會非常的凌亂;數(shù)據(jù)分離能更好的增加代碼可讀性和可維護性,也能更好的二次修改使用2021-09-09
Python 使用 multiprocessing 模塊創(chuàng)建進(jìn)程池的操作方法
在現(xiàn)代計算任務(wù)中,尤其是處理大量數(shù)據(jù)或計算密集型任務(wù)時,使用并行處理可以顯著提升程序性能,Python的multiprocessing模塊提供了創(chuàng)建進(jìn)程池的功能,通過預(yù)先創(chuàng)建的進(jìn)程來并發(fā)執(zhí)行任務(wù),避免了頻繁的進(jìn)程創(chuàng)建和銷毀,感興趣的朋友一起看看吧2024-10-10
python實現(xiàn)多進(jìn)程并發(fā)控制Semaphore與互斥鎖LOCK
本文主要介紹了python實現(xiàn)多進(jìn)程并發(fā)控制Semaphore與互斥鎖LOCK,通過實例來介紹互斥鎖和進(jìn)程并發(fā)控制 semaphore的具體使用,感興趣的同學(xué)可以了解一下2021-05-05
Python?對象拷貝及深淺拷貝區(qū)別的詳細(xì)教程示例
這篇文章主要介紹了Python?對象拷貝及深淺拷貝區(qū)別的詳細(xì)教程示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03
詳細(xì)解讀Python中解析XML數(shù)據(jù)的方法
這篇文章主要介紹了Python中解析XML數(shù)據(jù)的方法,是Python入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下2015-10-10
Django中使用haystack+whoosh實現(xiàn)搜索功能
這篇文章主要介紹了Django之使用haystack+whoosh實現(xiàn)搜索功能,本文通過實例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下2019-10-10

