我知道这对你们中的许多人来说都是令人沮丧的。我刚刚开始学习Python并需要一些基本的文件处理帮助。
我拍了很多截图,最终放在我的桌面上(因为这是默认设置)。我知道我可以更改屏幕截图设置以自动将其保存在其他位置。但是,我认为这个程序将是一个教我如何排序文件的好方法。我想使用python自动对桌面上的所有文件进行排序,找出以.png(屏幕截图的默认文件类型)结尾的文件,然后将其移动到我命名为“Archive”的文件夹中。
这是我到目前为止所得到的:
import os
import shutil
source = os.listdir('/Users/kevinconnell/Desktop/Test_Folder/')
destination = 'Archive'
for files in source:
if files.endswith('.png'):
shutil.move(source, destination)
我玩过很多都无济于事。在这个最新版本中,我在运行程序时遇到以下错误:
追踪(最近一次通话): 文件“pngmove_2.0.py”,第23行,in shutil.move(来源,目的地) 文件“/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py”,第290行,移动 TypeError:强制转换为Unicode:需要字符串或缓冲区,列出找到
我的印象是我对源和目标所需的正确约定/语法有一些问题。但是,到目前为止,我还没有找到很多帮助来解决它。我使用os.path.abspath()来确定您在上面看到的文件路径。
提前感谢任何帮助我保持理智。
我相信我非常接近这个问题。我敢肯定,如果我继续玩它,我会弄明白的。就这样,所有帮助过我的人都会更新......
这是我正在使用的当前代码:
import os
import shutil
sourcepath ='/Users/kevinconnell/Desktop/'
source = os.listdir(sourcepath)
destinationpath = '/Users/kevinconnell/Desktop/'
for files in source:
if files.endswith('.png'):
shutil.move(os.path.join(sourcepath,'Test_Folder'), os.path.join(destinationpath,'Archive'))
这适用于将我的'Test_Folder'文件夹重命名为'Archive'。 但是,它会移动文件夹中的所有文件,而不是移动以“.png”结尾的文件。
答案 0 :(得分:3)
您尝试移动整个源文件夹,需要指定文件路径
import os
import shutil
sourcepath='C:/Users/kevinconnell/Desktop/Test_Folder/'
sourcefiles = os.listdir(sourcepath)
destinationpath = 'C:/Users/kevinconnell/Desktop/Test_Folder/Archive'
for file in sourcefiles:
if file.endswith('.png'):
shutil.move(os.path.join(sourcepath,file), os.path.join(destinationpath,file))
答案 1 :(得分:2)
另一种选择是使用glob模块,它允许您指定文件掩码并检索所需文件的列表。 它应该像
一样简单import glob
import shutil
# I prefer to set path and mask as variables, but of course you can use values
# inside glob() and move()
source_files='/Users/kevinconnell/Desktop/Test_Folder/*.png'
target_folder='/Users/kevinconnell/Dekstop/Test_Folder/Archive'
# retrieve file list
filelist=glob.glob(source_files)
for single_file in filemask:
# move file with full paths as shutil.move() parameters
shutil.move(single_file,target_folder)
尽管如此,如果您正在使用glob或os.listdir,请记住为源文件和目标设置完整路径。
答案 2 :(得分:0)
基于@Gabriels回答。 我已经付出了一些努力,因为我喜欢"分类"我的文件类型到文件夹中。我现在用它。
我相信这就是你要找的东西,这很有趣找出
本脚本:
shutil.move
$ python organize_files.py
filetomove: /Users/jkirchoff/Desktop/Screen Shot 2018-05-15 at 12.16.21 AM.png
movingfileto: /Users/jkirchoff/Pictures/Archive/Screen Shot 2018-05-15 at 12.16.21 AM.png
我命名为organize_files.py
#!/usr/bin/env python3
# =============================================================================
# Created On : MAC OSX High Sierra 10.13.4 (17E199)
# Created By : Jeromie Kirchoff
# Created Date: Mon May 14 21:46:03 PDT 2018
# =============================================================================
# Answer for: https://stackoverflow.com/a/23561726/1896134 PNG Archive
# NOTE: THIS WILL NOT CREATE THE DESTINATION FOLDER(S)
# =============================================================================
import os
import shutil
file_extensn = '.png'
mac_username = 'jkirchoff'
search_dir = '/Users/' + mac_username + '/Desktop/'
target_foldr = '/Users/' + mac_username + '/Pictures/Archive/'
ignore_fldrs = [target_foldr,
'/Users/' + mac_username + '/Documents/',
'/Users/' + mac_username + '/AnotherFolder/'
]
for subdir, dirs, files in os.walk(search_dir):
for file in files:
if subdir not in ignore_fldrs and file.endswith(file_extensn):
# print('I would Move this file: ' + str(subdir) + str(file)
# # + "\n To this folder:" + str(target_foldr) + str(file)
# )
filetomove = (str(subdir) + str(file))
movingfileto = (str(target_foldr) + str(file))
print("filetomove: " + str(filetomove))
print("movingfileto: " + str(movingfileto))
# =================================================================
# IF YOU ARE HAPPY WITH THE RESULTS
# UNCOMMENT THE SHUTIL TO MOVE THE FILES
# =================================================================
# shutil.move(filetomove, movingfileto)
pass
elif file.endswith(file_extensn):
# print('Theres no need to move these files: '
# + str(subdir) + str(file))
pass
else:
# print('Theres no need to move these files either: '
# + str(subdir) + str(file))
pass
答案 3 :(得分:0)
import os
import shutil
Folder_Target = input("Path Target which Contain The File Need To Move it: ")
File_Extension = input("What Is The File Extension ? [For Example >> pdf , txt , exe , ...etc] : ")
Folder_Path = input("Path To Move in it : ")
Transformes_Loges = input("Path To Send Logs Of Operation in : ")
x=0
file_logs=open(Transformes_Loges+"\\Logs.txt",mode="a+")
for folder, sub_folder, file in os.walk(Folder_Target):
for sub_folder in file:
if os.path.join(folder, sub_folder)[-3:]==File_Extension:
path= os.path.join(folder, sub_folder)
file_logs.write(path+" ===================== Was Moved to ========================>> "+Folder_Path )
file_logs.write("\n")
shutil.move(path, Folder_Path)
x+=1
file_logs.close()
print("["+str(x)+"]"+"File Transformed")