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

时间:2018-01-18 08:20:12

标签: 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"):
        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

1 个答案:

答案 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具有良好的文档,易于使用;只需启动Python并输入程序的一个片段,就可以尝试一些东西,直到你可以看到在你的程序中写什么来让它做你想做的事情,而不会产生猜测,错别字或没有根据的期望。
  • 不要为变量使用保留关键字。理解字符串和变量名称(以及关键字)之间的区别。
  • 你遇到的很多错误都是非常常见的初学者错误。一些谷歌搜索(特别是错误信息或描述不起作用的短语)将经常引导您在Stack Overflow上找到一个很好的答案,解释究竟有什么问题以及如何解决它。
  • 因此,不要在一个问题上塞满太多东西。大多数情况下,如果你的问题足够具体,你甚至不必在看到错误时就问它。

为了具体化一个例子,在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")看起来像您期望的那样?)