批量讀取多個資料夾下的檔名,儲存為txt
阿新 • • 發佈:2021-01-25
技術標籤:python
批量讀取多個資料夾下的檔名,儲存為txt
1. 只儲存檔名
(1)相關函式
os.walk()的語法格式如下,其中top – 是你所要遍歷的目錄的地址, 返回的是一個三元組(root,dirs,files),具體見: 菜鳥教程.
os.walk(top[, topdown=True[, onerror=None[, followlinks=False]]])
open() 函式用於開啟一個檔案,建立一個 file 物件,語法格式如下,name是包含了你要訪問的檔名稱的字串值, mode 決定了開啟檔案的模式(預設為r,只讀模式開啟檔案),具體見: 菜鳥教程.
open(name[, mode[, buffering]])
writelines() 函式用於向檔案中寫入一系列字串,方法語法如下:
fileObject.writelines( [ str ])
(2)讀取指定路徑下的子目錄
定義file_dirs(),返回子目錄列表,
import os
from argparse import ArgumentParser
# 設定常用引數
parser = ArgumentParser(description='process')
parser.add_argument("--save_path", type= str,
default='E:\\aboutVS\\pycharm\\saliency(paper)\\PythonProject\CNNIQA-master\\data\\cross_data',
help="save txt path")
parser.add_argument("--image_path", type=str, default='E:\\aboutVS\\dataset\\image\\cross_dataset')
args = parser.parse_args ()
def file_dirs(path):
for root, dirs, files in os.walk(path):
dirs
return dirs;
定義file_name(),返回檔名列表,
# 讀取資料夾裡圖片名字
def file_name(file_dir):
for root, dirs, files in os.walk(file_dir):
# 當前路徑下所有子目錄
files
return files
遍歷資料夾,儲存檔名
str_list = file_dirs(args.image_path)#獲取子目錄list
img_name = []#用於存放所有檔名,初始為空
for j in range(len(str_list)):
img_dir = file_name(args.image_path+'\\'+str_list[j]+'\\')#這裡可以拼接要訪問的子目錄的完整路徑
img_name += img_dir
for i in range(len(img_name)):
img_name[i] = img_name[i] + '\n'
print(img_dir)
把檔名儲存到文字中
# 把影象名寫入txt
f = open(args.save_path+'\\img_dir.txt', 'w')
f.writelines(img_name) #writelines()寫入list
f.close()
print('File name extraction complete')
最終結果如下:
完整程式碼:
"""
批量讀取多個資料夾下的檔名,儲存為txt
"""
import os
from argparse import ArgumentParser
# 設定常用引數
parser = ArgumentParser(description='process')
parser.add_argument("--save_path", type=str,
default='E:\\aboutVS\\pycharm\\saliency(paper)\\PythonProject\CNNIQA-master\\data\\cross_data',
help="save txt path")
parser.add_argument("--image_path", type=str, default='E:\\aboutVS\\dataset\\image\\cross_dataset')
args = parser.parse_args()
# 取資料夾裡圖片名字的演算法
def file_name(file_dir):
for root, dirs, files in os.walk(file_dir):
# 當前路徑下所有子目錄
files
return files
def file_dirs(path):
for root, dirs, files in os.walk(path):
dirs
return dirs
str_list = file_dirs(args.image_path)
img_name = []
for j in range(len(str_list)):
img_dir = file_name(args.image_path+'\\'+str_list[j]+'\\')
img_name += img_dir
for i in range(len(img_name)):
img_name[i] = img_name[i] + '\n'
for i in range(len(str_list)):
str_list[i]=str_list[i]+'\n'
print(img_dir)
print(str_list)
# 把影象名寫入txt
f = open(args.save_path+'\\img_dir.txt', 'w')
f.writelines(img_name) # f.write()寫入str,f.writelines()寫入list
f.close()
f = open(args.save_path+'\\list.txt', 'w')
f.writelines(str_list)
f.close()
print('File name extraction complete')
2. 儲存檔案的完整路徑
parser = ArgumentParser(description='PyTorch CNNIQA test on the whole cross dataset')
parser.add_argument("--dataset_dir", type=str, default='E:\\aboutVS\\dataset\\image\\cross_dataset',
help="dataset dir.")
parser.add_argument("--save_path", type=str,
default='E:\\aboutVS\\pycharm\\saliency(paper)\\PythonProject\CNNIQA-master\\data\\cross_data\\',
help="save path")
args = parser.parse_args()
image_list = [] # image_list是list,list可以append生成新的list
img_str = "" # im_str和img_str是字串,字串為空用str=""表示,list為空用list=[]表示
for root, dirs, files in os.walk(args.dataset_dir):
for name in files:
im_str = os.path.join(root, name)
img_str += im_str
image_list.append(im_str)
for i in range(len(image_list)):
image_list[i] = image_list[i]+'\n'
f = open(args.save_path+'image_full_path.txt','w')
f.writelines(image_list)
f.close()
結果如下: