1. 程式人生 > 其它 >批量讀取多個資料夾下的檔名,儲存為txt

批量讀取多個資料夾下的檔名,儲存為txt

技術標籤: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()

結果如下: