之前在爬取数据时,把文档和图片分别存放了,放在同名的文本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)
"""
"""
文件处理的流程:
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)
"""