Python 将桌面上的.png移动到新目录

Python 将桌面上的.png移动到新目录,python,Python,对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"):

对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))
我将感谢任何帮助。多谢各位

编辑 谢谢你的帮助和链接。我真的很感激。我正在阅读automatetheboringstuff和《现代Python食谱》(2018)

我相信它是有效的,因为我没有收到任何错误,但它没有移动文件。它似乎在这里工作:。也许它在两个驱动器之间不起作用?无论如何,谢谢你

编辑我成功了

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

请参见在线评论

#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有很好的文档,易于使用;只需启动Python并键入程序的一个片段,您就可以尝试一些事情,直到您可以看到要在程序中编写什么,以使其实现您想要的功能,而无需猜测、键入错误或毫无根据的期望
  • 不要对变量使用保留关键字。理解字符串和变量名(以及关键字)之间的区别
  • 你犯的许多错误都是非常常见的初学者错误。一点谷歌搜索(特别是一条错误消息或一个描述什么不起作用的短语)通常会让你找到一个关于堆栈溢出的极好答案,解释到底是什么错误以及如何修复它
  • 因此,不要在一个问题中塞进太多东西。大多数情况下,如果你的问题足够具体,你甚至不必在发现问题后再问
具体来说,在Python interactive REPL中,您可能想知道
endswith
是否可以与大写文件名一起使用,所以您可以尝试:

>>> 'PANGEA.PNG'.endswith(".png",".jpg")

这给了您一条有点令人难以置信的消息,“切片索引必须是整数”,这本身并没有多大帮助(除非您理解它的意图--
endswith
需要一个“后缀”参数和一个(可选的)“开始”参数,然后用于“切片”字符串;
.jpg”
不是
start
的有效值,因此切片会因此而失败)但很容易搜索——这是我第一次在谷歌上点击搜索,因此你可以找出你的尝试有什么问题,以及错误消息告诉你什么,现在你可以继续修复代码中的一个小错误,然后继续进行下一个实验(可能检查
os.path.join(“Sorted”,“PANGEA.PNG”)
是否与您期望的一样?

查看内联注释

#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有很好的文档,易于使用;只需启动Python并键入程序的一个片段,您就可以尝试一些事情,直到您可以看到要在程序中编写什么,以使其实现您想要的功能,而无需猜测、键入错误或毫无根据的期望
  • 不要对变量使用保留关键字。理解字符串和变量名(以及关键字)之间的区别
  • 你犯的许多错误都是非常常见的初学者错误。一点谷歌搜索(特别是一条错误消息或一个描述什么不起作用的短语)通常会让你找到一个关于堆栈溢出的极好答案,解释到底是什么错误以及如何修复它
  • 因此,不要在一个问题中塞进太多东西。大多数情况下,如果你的问题足够具体,你甚至不必在发现问题后再问
具体来说,在Python interactive REPL中,您可能想知道
endswith
是否可以与大写文件名一起使用,所以您可以尝试:

>>> 'PANGEA.PNG'.endswith(".png",".jpg")

这给了您一条有点令人难以置信的消息,“切片索引必须是整数”,这本身并没有多大帮助(除非您理解它的意图--
endswith
需要一个“后缀”参数和一个(可选的)“开始”参数,然后用于“切片”字符串;
.jpg”
不是
start
的有效值,因此切片会因此而失败)但很容易搜索——这是我第一次在谷歌上点击搜索,因此你可以找出你的尝试有什么问题,以及错误消息告诉你什么,现在你可以继续修复代码中的一个小错误,然后继续下一个实验(可能检查
os.path.join(“排序”,“PANGEA.PNG”)
是否与您期望的一样?

尝试在os.listdir(源代码)中使用f):除了\在字符串中有特殊含义并且应该由另一个\转义之外,这段代码有什么问题?您认为
文件(“未排序”)有什么问题
是什么意思?只是
file
已经是一个未排序的列表(尽管不要对变量使用保留关键字
file
)。对于那些带有反斜杠的讨厌的Windows文件名,可能会切换到前斜杠或
r'…'
字符串。这些参数看起来是安全的,但Python通常会在字符串中使用反斜杠来做一些不愉快的事情。
.endswith
的参数需要是单个字符串,或者是一个iterable。请在os.listdir(源代码)中尝试f:除了\在字符串中有特殊含义并且应该由另一个\转义之外,此代码有什么问题?您认为
文件(“未排序”)
是什么意思?只是
file
已经是一个未排序的列表(尽管不要对变量使用保留关键字
file
)。对于那些带有反斜杠的讨厌的Windows文件名,可能会切换到前斜杠或
r'…'
字符串。这些参数看起来很安全,但是Python通常会在字符串中使用反斜杠来做一些不愉快的事情。
.endswith
的参数必须是单个字符串,或者是一个iterable。