python - 文件夹内的Python订单文件不起作用
问题描述
我在 Python 中创建了一个脚本,将文件插入到与文件扩展名相同的文件夹中。在 Windows 上工作正常,在 Mac Os 上出现问题。我附上收到的代码和错误。
import os
import shutil
percorso = input("Inserisci il percorso ")
os.chdir(percorso)
for f in os.listdir():
f_name, f_ext = os.path.splitext(f)
f_new = f_ext[1:len(f_ext)]
if os.path.isdir(f) or os.path.isdir('/Users/net/Downloads/.DS_Store'):
pass
print("sono una cartella")
else:
print("sono un file")
#is_dir = os.path.exists(r"C:\Users\LUIS\Desktop\prova" + f_new)
#print(is_dir)
try:
os.mkdir(f_new)
print("cartella creata")
except FileExistsError:
pass
print("File inseriti nelle rispettive cartelle")
except FileNotFoundError:
print("Tutti i file sono stati ordinati")
f2 = f_name+f_ext
shutil.move(f2, f_new)
这是我得到的错误:
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/shutil.py", line 803, in move
os.rename(src, real_dst)
FileNotFoundError: [Errno 2] No such file or directory: '.DS_Store' -> ''
有什么帮助吗?谢谢
解决方案
问题与隐藏的 OSX 文件有关,它们遵循 .name 模式,在这些情况下,它们的变量“f_ext”为空,因此 f_new 也是。当您尝试移动文件“shutil.move (f2, f_new)”时会引发错误
我做了我创建了一个小条件来测试这个假设,它在我的 Macbook 上完美运行
import os
import shutil
percorso = input("Inserisci il percorso ")
os.chdir(percorso)
for f in os.listdir():
f_name, f_ext = os.path.splitext(f)
print(os.path.splitext(f))
if f_ext: # <---------- HERE
f_new = f_ext[1:len(f_ext)]
else:
f_new = 'no_extension'
if os.path.isdir(f):
pass
print("sono una cartella")
else:
print("sono un file")
try:
os.mkdir(f_new)
print("cartella creata")
except FileExistsError:
pass
print("File inseriti nelle rispettive cartelle")
except FileNotFoundError:
print("Tutti i file sono stati ordinati")
f2 = f_name + f_ext
shutil.move(f2, f_new)
其他的检查,好像文件夹已经存在,没有同音异义才新建文件夹也需要执行。但是该代码有效。
推荐阅读
- javascript - Console.log 到 Document.write
- asp.net-core - 如何使用重写的文件名提供文件?
- php - 如何更新 Amazon CloudFront 分配
- python - 如何获取我刚刚打印的值的单元格的位置?
- javascript - 在Javascript中过滤foreach索引值
- algorithm - 纯 Knuth/Fisher-Yates 在 haskell 中洗牌
- java - 使用邮递员测试启用 Spring Security 的 API
- firebase - Google 登录:错误 400。在此服务器上找不到请求的 URL。我们知道的就这些
- gradle - Gradle - 属性可以放在 settings.gradle.kts
- c++ - 每次循环迭代后递减迭代器显示奇怪的行为