相对较新的python,尝试将基于类型的文件从一个目录移动到另一个目录。
import shutil
import os
source = 'C:\Users\home\Desktop'
Unsorted = 'C:\Users\home\Desktop\'
Sorted = 'B:\Pictures'
file = os.listdir(source)
for f in file("Unsorted"):
if file.endswith(".png",".jpg"):
print(os.path.join("Sorted", file))
我将不胜感激任何帮助。谢谢。
修改 感谢您的帮助和链接。对此,我真的非常感激。我正在阅读自动化的boringstuff和Modern Python Cookbook(2018)。
import os
source = 'C:\\Users\\home\\Desktop'
sorted = 'B:\\Pictures'
for f in os.listdir(source):
if f.endswith((".png",".jpg",".jpeg")):
print(os.path.join(sorted, f))
我相信它有效,因为我没有收到任何错误,但它没有移动文件。它似乎在这里工作:link。也许它不会在驱动器之间工作?无论如何,谢谢!
编辑我让它上班了!
import os
import shutil
source = os.path.join('C:\\Users\\home\\Desktop')
sort = os.path.join('B:\\Pictures')
for f in os.listdir(source):
if f.endswith((".png",".jpg",".jpeg")):
shutil.move(os.path.join(source, f), sort)
谢谢大家的帮助!我希望你们有一天的美好时光!谢谢。 :D
答案 0 :(得分:3)
查看内联评论。
#import shutil # commented out as this is not used for anything here
import os
# use r'...' strings for file names with backslashes (or use forward slashes instead)
source = r'C:\Users\home\Desktop'
#Unsorted = r'C:\Users\home\Desktop\' # also not used
Sorted = r'B:\Pictures'
# listdir produces an unsorted list of files so no need to muck with it
for f in os.listdir(source):
# you had the wrong variable name here, and missing parens around the tuple
if f.endswith((".png",".jpg")):
# again, the variable is f
# and of course "Sorted" is just a string, you want the variable
print(os.path.join(Sorted, f))
一些一般性建议:
为了具体化一个例子,在Python交互式REPL中,你可能真的想知道endswith
是否适用于大写文件名,所以你试试看:
>>> 'PANGEA.PNG'.endswith(".png",".jpg")
这给你一个有点不可思议的消息,“切片索引必须是整数”,这本身并不是很有用(直到你理解它试图说的是什么 - endswith
想要一个“后缀”参数和一个(可选)“start”参数,然后用于“切片”字符串; ".jpg"
不是start
的有效值,因此切片失败,因为这样)但很容易搜索for - this Stack Overflow question实际上是我对the search endswith "slice indices must be integers"
的第一次谷歌搜索,所以你弄清楚你的尝试出了什么问题,以及错误信息告诉你什么,现在你继续修复其中一个到目前为止您的代码中的小错误,并继续下一个实验(也许检查os.path.join("Sorted", "PANGEA.PNG")
看起来像您期望的那样?)