python实现把同名文件放入对应的文件夹内

之前在爬取数据时,把文档和图片分别存放了,放在同名的文本txt以及同名文件夹下,现在想实现把同名文本文档放在同名文件夹下的功能(已测试,针对一般的命名的都可正常进行)

找出了自己文件不兼容的情况并已解决:
利用文本名创建文件夹时:

  • 如果文本有空格,文件夹名称会默认去除空格,而由此找不到对应匹配的文件及文本 产生报错
  • 同理 当文件名称有…时 创建的文件夹也会不包含…
    解决:利用os.rename 方法 处理文本名,进行重命名,再由此去寻找文件夹

需要使用的库

import os
import shutil

工作路径的更改

filepath=r'E:\\fashioninfo\\'#你指定的文件存放路径

curdir=os.getcwd()
print("当前工作目录为{}".format(curdir))

os.chdir(filepath)
curdir=os.getcwd()
print("当前工作目录为{}".format(curdir))

文件名列表的获取及一些无关项的处理

rawtxtlist=[]#获取到的是所有文本文档和文件夹的名字
txtlist=[]

"""os.listdir()函数得到的是仅当前路径下的文件名,不包括子目录中的文件,所有需要使用递归的方法得到全部文件名。"""
rawtxtlist=os.listdir(curdir)

print("所有文本文档和文件夹的数目为{}".format(len(rawtxtlist)))#所有文本文档和文件夹的数目为57436
#包含了 文档列表.bat txtlist.txt(before 用于生成所有文本文档和文件夹的名字的文件)去除
for i in rawtxtlist:
    if(i=='文档列表.bat'or i=='txtlist.txt'):
        rawtxtlist.remove(i)
print("在去除无关的文本文档和文件夹的数目为{}".format(len(rawtxtlist)))#在去除无关的文本文档和文件夹的数目为57434



#获取包含所有文本文档名称的列表
for i in rawtxtlist:
    if(i[-4:]=='.txt'):
        #print(i)
        txtlist.append(i)
print("所有文本文档数目为{}".format(len(txtlist)))  #所有文本文档数目为34309

文件的移动

for i in txtlist:
    txt=i[:-4]
    #print(i)
    if (os.path.exists(txt) == True):
        try:
            shutil.move(i,txt)
        except Exception as e:
            print("移动文件失败,原因:", e)
    else:
        #如果当前文本文档没有对应的同名文件夹,则进行创建
        os.makedirs(txt)
        try:
            shutil.move(i, txt)
        except Exception as e:
            print("移动文件失败,原因:", e)

完整源代码

"""
文件处理的流程:
1.获取到所有文本文件的名称列表
2.对其进行相应的处理(去除后面的/n)
3.对每一个文本,查找对应的同名文件夹,并放入其中,如果没有文件夹,创建放入其中

unsolved:文本名称包含特殊字符 但利用cmd方式获取到的名称列表无法读取到变成了空格
"""
import os
import shutil
filepath=r'E:\\fashioninfo\\'#你指定的文件存放路径

curdir=os.getcwd()
print("当前工作目录为{}".format(curdir))

os.chdir(filepath)
curdir=os.getcwd()
print("当前工作目录为{}".format(curdir))
# filename='xxloki'
# os.makedirs(filename)
#doclist='E:\\fashioninfo\\txtlist.txt'
rawtxtlist=[]#获取到的是所有文本文档和文件夹的名字
txtlist=[]
#文本名称包含特殊字符 但利用cmd方式获取到的名称列表无法读取到变成了空格
# with open(doclist, 'r', encoding='gbk') as file:
#     for line in file:
#         #if line.replace("\n","")[-4:0]=='.txt':
#             rawtxtlist.append(line)
#需要利用新的方法获取文本列表
"""os.listdir()函数得到的是仅当前路径下的文件名,不包括子目录中的文件,所有需要使用递归的方法得到全部文件名。"""
rawtxtlist=os.listdir(curdir)
# for i in rawtxtlist:
#     print(i)
print("所有文本文档和文件夹的数目为{}".format(len(rawtxtlist)))#所有文本文档和文件夹的数目为57436
#包含了 文档列表.bat txtlist.txt(before 用于生成所有文本文档和文件夹的名字的文件)去除
for i in rawtxtlist:
    if(i=='文档列表.bat'or i=='txtlist.txt'):
        rawtxtlist.remove(i)
print("在去除无关的文本文档和文件夹的数目为{}".format(len(rawtxtlist)))#在去除无关的文本文档和文件夹的数目为57434

#it is last version, now it has been abolished
#每个元素中都包含\n,我们需要进行去除
# for i in range(len(rawtxtlist)):
#     rawtxtlist[i]=rawtxtlist[i].replace("\n","")
#print(rawtxtlist)


#获取包含所有文本文档名称的列表
for i in rawtxtlist:
    if(i[-4:]=='.txt'):
        #print(i)
        txtlist.append(i)
print("所有文本文档数目为{}".format(len(txtlist)))  #所有文本文档数目为34309
for i in txtlist:
    txt=i[:-4]
    #print(i)
    if (os.path.exists(txt) == True):
        try:
            shutil.move(i,txt)
        except Exception as e:
            print("移动文件失败,原因:", e)
    else:
        #如果当前文本文档没有对应的同名文件夹,则进行创建
        os.makedirs(txt)
        try:
            shutil.move(i, txt)
        except Exception as e:
            print("移动文件失败,原因:", e)




'''

#print(txtlist[545][:-4]) 获取文本名称

'''
    # if (os.path.exists(txt) == True):
    #     try:
    #         src = txt + '.txt'
    #         shutil.move(src, txt)
    #     except Exception as e:
    #         print("移动文件失败,原因:", e)
    # else:
    #     #如果当前文本文档没有对应的同名文件夹,则进行创建
    #     os.makedirs(txt)
    #     try:
    #         src = txt + '.txt'
    #         shutil.move(src, txt)
    #     except Exception as e:
    #         print("移动文件失败,原因:", e)





"""
move(src, dst): 将src移动至dst目录下。若dst目录不存在,则效果等同于src改名为dst。若dst目录存在,将会把src文件夹的所有内容移动至该目录下面

src:源文件夹或文件
dst:移动至dst文件夹,或将文件改名为dst文件。如果src为文件夹,而dst为文件将会报错
copy_function:拷贝文件的方式,可以传入一个可执行的处理函数。默认为copy2,Python3新增参数
"""

"""
#获取文件的名称,并测试是否存在该文件
#test1=txtlist[0][:-5]
test1='做最雅痞的工装仔!Carhartt WIP x Clarks Originals全新联名鞋款释出!'
#if 存在 则放入
#else 不存在 则创建并放入
if (os.path.exists(test1)==True):
    try:
        src=test1+'.txt'
        shutil.move(src,test1)
    except Exception as e:
        print("移动文件失败,原因:", e)
"""





完整源代码2.0

"""
文件处理的流程:
1.获取到所有文本文件的名称列表
2.对其进行相应的处理(去除后面的/n)
3.对每一个文本,查找对应的同名文件夹,并放入其中,如果没有文件夹,创建放入其中

利用文本名创建文件夹时,文件夹名称会默认去除空格 以及当文件名称有...时 创建的文件夹也会不包含...
"""
import os
import shutil
filepath=r'E:\\fashioninfo\\'#你指定的文件存放路径

curdir=os.getcwd()
print("当前工作目录为{}".format(curdir))

os.chdir(filepath)
curdir=os.getcwd()
print("当前工作目录为{}".format(curdir))
# filename='xxloki'
# os.makedirs(filename)
#doclist='E:\\fashioninfo\\txtlist.txt'
rawtxtlist=[]#获取到的是所有文本文档和文件夹的名字
txtlist=[]
#文本名称包含特殊字符 但利用cmd方式获取到的名称列表无法读取到变成了空格
# with open(doclist, 'r', encoding='gbk') as file:
#     for line in file:
#         #if line.replace("\n","")[-4:0]=='.txt':
#             rawtxtlist.append(line)
#需要利用新的方法获取文本列表
"""os.listdir()函数得到的是仅当前路径下的文件名,不包括子目录中的文件,所有需要使用递归的方法得到全部文件名。"""
rawtxtlist=os.listdir(curdir)
# for i in rawtxtlist:
#     print(i)
print("所有文本文档和文件夹的数目为{}".format(len(rawtxtlist)))#所有文本文档和文件夹的数目为57436
#包含了 文档列表.bat txtlist.txt(before 用于生成所有文本文档和文件夹的名字的文件)去除
for i in rawtxtlist:
    if(i=='文档列表.bat'or i=='txtlist.txt'):
        rawtxtlist.remove(i)
print("在去除无关的文本文档和文件夹的数目为{}".format(len(rawtxtlist)))#在去除无关的文本文档和文件夹的数目为57434

#it is last version, now it has been abolished
#每个元素中都包含\n,我们需要进行去除
# for i in range(len(rawtxtlist)):
#     rawtxtlist[i]=rawtxtlist[i].replace("\n","")
#print(rawtxtlist)


#获取包含所有文本文档名称的列表

for i in rawtxtlist:
    if(i[-4:]=='.txt'):
        #print(i)
        txtlist.append(i)
print("所有文本文档数目为{}".format(len(txtlist)))  #所有文本文档数目为34309
for i in txtlist:
    #利用文本名创建文件夹时,文件夹名称会默认去除空格 以及当文件名称有...时 创建的文件夹也会不包含...
    txt=i[:-4]
    txt=txt.rstrip()#去除文章末尾空格
    #去除文件末尾的省略号
    if (txt[-3:] == '...'): txt = txt[:-3]
    if (txt[-2:] == '..'): txt = txt[:-2]
    if (txt[-1:] == '.'): txt = txt[:-1]
    os.rename(i,txt+'.txt')
    #print(i)
    if (os.path.exists(txt) == True):
        #try:
            shutil.move(txt+'.txt',txt)
        #except Exception as e:
            #print("移动文件失败,原因:", e)
    else:
        #如果当前文本文档没有对应的同名文件夹,则进行创建
        os.makedirs(txt)
        #try:
        shutil.move(txt+'.txt', txt)
        #except Exception as e:
           #print("移动文件失败,原因:", e)




'''

#print(txtlist[545][:-4]) 获取文本名称

'''
    # if (os.path.exists(txt) == True):
    #     try:
    #         src = txt + '.txt'
    #         shutil.move(src, txt)
    #     except Exception as e:
    #         print("移动文件失败,原因:", e)
    # else:
    #     #如果当前文本文档没有对应的同名文件夹,则进行创建
    #     os.makedirs(txt)
    #     try:
    #         src = txt + '.txt'
    #         shutil.move(src, txt)
    #     except Exception as e:
    #         print("移动文件失败,原因:", e)





"""
move(src, dst): 将src移动至dst目录下。若dst目录不存在,则效果等同于src改名为dst。若dst目录存在,将会把src文件夹的所有内容移动至该目录下面

src:源文件夹或文件
dst:移动至dst文件夹,或将文件改名为dst文件。如果src为文件夹,而dst为文件将会报错
copy_function:拷贝文件的方式,可以传入一个可执行的处理函数。默认为copy2,Python3新增参数
"""

"""
#获取文件的名称,并测试是否存在该文件
#test1=txtlist[0][:-5]
test1='做最雅痞的工装仔!Carhartt WIP x Clarks Originals全新联名鞋款释出!'
#if 存在 则放入
#else 不存在 则创建并放入
if (os.path.exists(test1)==True):
    try:
        src=test1+'.txt'
        shutil.move(src,test1)
    except Exception as e:
        print("移动文件失败,原因:", e)
"""





你可能感兴趣的:(知识点总结)