python 读取指定文件夹下的所有图片再输出指定内容到TXT文件中

本文介绍了一种使用Python处理文件路径的方法,包括路径规范化、替换、排序等操作,确保从指定文件夹中正确读取并按顺序排列所有图片路径。
import sys
import os

paths=['MOTFish/train/Black-porgy/img1']

f=open('MOTFish.txt', 'w')
for path in paths:
    sh_path=os.path.abspath(path)
    #sh_path = os.path.dirname(os.path.abspath(sys.argv[0]))
    sh_path = '/'.join(sh_path.split('\\'))#将 \ 替换成 /
    print("sh_path",sh_path)
    filenames=os.listdir(sh_path)
    for filename in filenames:
        im_path=sh_path+'/'+filename
        print(im_path)
        f.write(im_path+'\n')
f.close()

删除指定内容

import sys
import os

import ss as ss

paths=['MOTFish/train/Black-porgy/img1']

f=open('MOTFish.txt', 'w')
for path in paths:
    sh_path=os.path.abspath(path)
    #sh_path = os.path.dirname(os.path.abspath(sys.argv[0]))
    sh_path = '/'.join(sh_path.split('\\'))#将 \ 替换成 /

    print("sh_path",sh_path)
    filenames=os.listdir(sh_path)

    for filename in filenames:
        im_path=sh_path+'/'+filename

        print(im_path)

        i_path=im_path.replace("D:/Project/fish_data/code/paddle/PaddleDetection-release-2.3/","")

        print(i_path)

        f.write(i_path+'\n')
f.close()

感觉不是按顺序读取的,添加一个排序

import sys
import os

paths=['MOTFish/train/Black-porgy/img1']

f=open('MOTFish.txt', 'w')
for path in paths:
    new_path=os.path.abspath(path)
    new_path = '/'.join(new_path.split('\\'))#将 \ 替换成 /
    new_path = new_path.replace("D:/Project/fish_data/code/paddle/PaddleDetection-release-2.3/", "")
    print("sh_path",new_path)

    filenames=os.listdir(new_path)
    filenames.sort(key=lambda x: int(x.split('.')[0]))#排序
    print("filenames",filenames)

    for filename in filenames:
        path2=new_path+'/'+filename
        print(path2)
        f.write(path2+'\n')
f.close()

 输出的内容正好是我想要的

<think> 我们正在讨论如何使用Python读取指定文件夹中的所有图片文件。根据用户的查询,他们希望读取指定文件夹内的所有图片,而不仅仅局限于与Python脚本同一目录下的图片。这里我们将结合引用内容,提供几种有效的方法。 引用[1]和[引用2]都提供了读取指定文件夹图片的方法。其中引用[1]提到可以读取任意指定文件夹,并且可以存储到原文件夹或新文件夹。引用[2]使用了glob模块来获取指定格式的图片文件。引用[3]则涉及读取文件夹的子文件夹名字,但用户当前问题不需要子文件夹,所以我们主要参考前两个引用。 方法1:使用glob模块(推荐) 这种方法简单直接,可以指定多种图片格式,并且可以处理任意路径。 方法2:使用os模块的listdir,然后根据扩展名过滤。 下面我们分别展示这两种方法,并给出实际示例。 方法一:使用glob(支持多种格式,代码简洁) ```python import os from glob import glob def get_images_from_folder(folder_path): # 支持的图片格式列表 image_formats = ['*.jpg', '*.jpeg', '*.png', '*.gif', '*.bmp', '*.tiff'] image_paths = [] for image_format in image_formats: # 使用glob.glob获取匹配的文件路径,注意os.path.join需要与通配符结合 # 注意:glob的路径拼接要确保正确,这里使用os.path.join(folder_path, image_format) image_paths.extend(glob(os.path.join(folder_path, image_format))) return image_paths # 示例:读取指定文件夹中的所有图片 folder_path = "your/specified/folder/path" # 替换为你的文件夹路径 images = get_images_from_folder(folder_path) print(images) # 打印所有图片路径列表 ``` 方法二:使用os.listdir然后过滤(更灵活,可自定义过滤条件) ```python import os def get_images_from_folder(folder_path): # 支持的图片扩展名(小写) valid_extensions = ['.jpg', '.jpeg', '.png', '.gif', '.bmp', '.tiff'] # 获取文件夹下所有文件文件夹的名字 all_files = os.listdir(folder_path) # 过滤:只保留文件(排除文件夹)并且扩展名在有效列表中 images = [] for filename in all_files: # 拼接完整路径 full_path = os.path.join(folder_path, filename) # 检查是否为文件 if os.path.isfile(full_path): # 获取文件扩展名(转换为小写)并检查 ext = os.path.splitext(filename)[1].lower() if ext in valid_extensions: images.append(full_path) return images # 示例:同上 folder_path = "your/specified/folder/path" images = get_images_from_folder(folder_path) print(images) ``` 两种方法比较: 方法一(glob)代码更简洁,但是glob在递归子文件夹时不够方便(不过当前需求不需要递归)。 方法二(os.listdir)可以更灵活地处理各种情况,比如同时过滤文件属性等。 存储图片到新文件夹: 如果用户还需要将图片保存到另一个文件夹,我们可以这样做(以方法一获取的图片列表为例): ```python import shutil # 假设我们已经获取了图片列表images output_folder = "path/to/output/folder" # 确保输出文件夹存在 os.makedirs(output_folder, exist_ok=True) for img_path in images: # 获取图片文件名 img_name = os.path.basename(img_path) # 目标路径 dst_path = os.path.join(output_folder, img_name) # 复制文件 shutil.copy(img_path, dst_path) # 或者移动文件:shutil.move(img_path, dst_path) ``` 注意:以上两种方法都是非递归的,即只读取指定文件夹下的图片,不包括子文件夹中的图片。如果需要递归读取文件夹,可以使用`os.walk`或者glob的递归模式(`**`)。 递归读取方法(使用os.walk): ```python import os def get_images_recursive(folder_path): valid_extensions = ['.jpg', '.jpeg', '.png', '.gif', '.bmp', '.tiff'] images = [] for root, dirs, files in os.walk(folder_path): for filename in files: ext = os.path.splitext(filename)[1].lower() if ext in valid_extensions: full_path = os.path.join(root, filename) images.append(full_path) return images ``` 递归读取方法(使用glob的递归模式): ```python import glob def get_images_recursive(folder_path): image_formats = ['*.jpg', '*.jpeg', '*.png', '*.gif', '*.bmp', '*.tiff'] images = [] for image_format in image_formats: # 递归查找:注意使用'**'表示递归,但是需要设置recursive=True pattern = os.path.join(folder_path, '**', image_format) images.extend(glob.glob(pattern, recursive=True)) return images ``` 由于glob的递归模式在某些版本中可能性能问题,特别是在文件数量巨大的情况下,因此推荐使用os.walk。 总结: 根据需求选择合适的方法: 1. 只读取当前文件夹(非递归):推荐方法一或方法二。 2. 递归读取文件夹:推荐使用os.walk。 以上方法均支持任意指定文件夹,并且可以进一步处理图片(如读取、存储等)。 §§相关问题§§ 1. 如何递归读取文件夹中的所有图片(包括子文件夹)? 2. 如何读取并显示图片内容(使用PIL或OpenCV)? 3. 如何批量重命名文件夹中的图片文件? </think> ### Python读取指定文件夹中所有图片的完整方法 在Python读取指定文件夹中的所有图片文件,可以通过以下几种高效方法实现: #### 方法一:使用glob模块(推荐) ```python import glob import os def read_images(folder_path): """读取指定文件夹中的所有图片文件""" # 支持的图片格式列表(可扩展) image_formats = ['*.jpg', '*.jpeg', '*.png', '*.gif', '*.bmp'] image_paths = [] # 遍历所有图片格式 for fmt in image_formats: # glob查找匹配的文件路径 image_paths.extend(glob.glob(os.path.join(folder_path, fmt))) return sorted(image_paths) # 返回排序后的列表 # 使用示例 folder = "/path/to/your/images" # 替换为实际路径 images = read_images(folder) print(f"找到 {len(images)} 张图片:") for img in images[:5]: # 打印前5个文件路径 print(img) ``` #### 方法二:使用os模块(更灵活) ```python import os def read_images_os(folder_path): """使用os.listdir读取图片文件""" valid_exts = {'.jpg', '.jpeg', '.png', '.gif', '.bmp'} images = [] # 遍历文件夹内容 for filename in os.listdir(folder_path): full_path = os.path.join(folder_path, filename) # 检查是否为文件且扩展名有效 if os.path.isfile(full_path): _, ext = os.path.splitext(filename) if ext.lower() in valid_exts: images.append(full_path) return sorted(images) # 使用示例同方法一 ``` #### 方法三:完整处理流程(读取+存储) ```python import os import shutil from PIL import Image # 需要安装pillow: pip install pillow def process_images(src_folder, dst_folder=None): """读取图片并可选保存到新位置""" # 读取文件夹图片 images = read_images(src_folder) # 使用方法一的函数 # 处理每张图片 for img_path in images: img_name = os.path.basename(img_path) # 打开并处理图片(示例:转换为RGB) with Image.open(img_path) as img: rgb_img = img.convert('RGB') # 保存到新位置或覆盖原文件 if dst_folder: new_path = os.path.join(dst_folder, img_name) rgb_img.save(new_path) print(f"保存到: {new_path}") else: rgb_img.save(img_path) # 覆盖原文件 print(f"更新: {img_path}") return len(images) # 使用示例 process_images("/input/folder", "/output/folder") # 保存到新位置 process_images("/input/folder") # 覆盖原文件 ``` #### 关键参数说明: 1. **文件夹路径处理**: - 使用 `os.path.join()` 确保跨平台兼容性 - 绝对路径示例:`C:/Users/Name/Pictures` - 相对路径示例:`../images` 2. **支持的图片格式**: - 基础格式:JPG、PNG、GIF、BMP - 扩展格式:添加 `'*.webp', '*.tiff'` 等 3. **路径排序**: - `sorted()` 保证文件按名称顺序处理 - 自定义排序:`sorted(images, key=os.path.getmtime)`(按修改时间) > **最佳实践提示**: > 1. 路径中使用原始字符串:`r"C:\Users\Name\Pictures"` 避免转义问题[^1] > 2. 处理前检查文件夹存在性: > ```python > if not os.path.exists(folder_path): > os.makedirs(folder_path) # 自动创建缺失文件夹 > ``` > 3. 大文件夹处理:使用生成器节省内存 > ```python > def image_generator(folder): > for img in read_images(folder): > yield Image.open(img) > ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

高高呀~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值