python 图片拆分并保存至两个文件夹

这是一个Python脚本,用于将指定目录下的jpg和png图片按原始宽度的一半拆分为两个图片,并保存到不同的输出目录。脚本首先检查输出目录是否存在,然后逐个读取图片,分割并保存。此过程适用于需要处理图片大小的应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

# -*- coding: utf-8 -*-
"""
Created on Wed Jul  7 10:40:16 2021

@author: ZM
"""

import os
import time

import cv2
import numpy as np

# ----------------------------------------------------------------------------------------------------------------
# --脚本所支持的文件扩展名
supExpName = ["jpg", "png"]

countNum = 0  # --处理图片计数

print("该脚本将脚本所在目录的所支持的图片拆分为宽度为原来1/2的两个图片")
print("--程序将在5s后自动执行--脚本执行需要使用 cv2库--")
print("--使用 pip install opencv-python 命令可以安装该库--")
print("Loading", end="")
for i in range(10):
    print(".", end='', flush=True)
    time.sleep(0.5)
# ----------------------------------------------------------------------------------------------------------------
# --获取当前路径
in_dir = os.path.abspath('.') + "/"
# --设置输出路径
out_dir1 = os.path.abspath('.') + "/out_dir1/"
out_dir2 = os.path.abspath('.') + "/out_dir2/"
# 判断输出文件夹是否存在,若不存在则创建
if not os.path.exists(out_dir1):
    os.mkdir("out_dir1")
    print("创建输出目录")
if not os.path.exists(out_dir2):
    os.mkdir("out_dir2")
    print("创建输出目录")

# ----------------------------------------------------------------------------------------------------------------
# --打开图片
def cv_imread(in_pash):
    cv_img = cv2.imdecode(np.fromfile(in_pash, dtype=np.uint8), -1)  # -1表示cv2.IMREAD_UNCHANGED
    print(os.path.basename(in_pash) + "\t宽&高", cv_img.shape[1], cv_img.shape[0])
    return cv_img


# --保存图片
def cv_imwrite(out_path, img_mp):
    cv2.imencode('.png', img_mp)[1].tofile(out_path)


# ----------------------------------------------------------------------------------------------------------------
# --遍历 in_dir 路径下所有文件
for file_name in os.listdir(in_dir):
    extName = os.path.splitext(file_name)[-1][1:]  # --分离并截取扩展名
    extName = extName.lower()  # --将取得的扩展名转为小写

    # --判断文件是否为所支持的图片格式
    if extName in supExpName:
        countNum = countNum + 1;
        print("\n正在处理第 %d 张图片" % (countNum))
        img = cv_imread(in_dir + file_name)
        h, w, w2 = img.shape[0], img.shape[1], img.shape[1] // 2
        # print(h,w,w2)

        # print(os.getcwd())  #--这个命令可以用来获取当前脚本所在目录--
        img_name = file_name.split('.')[0]

        cropped1 = img[0:int(h), 0:int(w2)]
        cropped2 = img[0:int(h), int(w2):int(w)]
        cv_imwrite(out_dir1 + img_name + "-1" + ".png", cropped1)
        cv_imwrite(out_dir2 + img_name + "-2" + ".png", cropped2)
        #cv2.imwrite(os.path.join(out_dir1,img_name + "-1" + ".png"),cropped1)
        #cv2.imwrite(os.path.join(out_dir2,img_name + "-1" + ".png"),cropped2)

print("--complete--")

# ----------------------------------------------------------------------------------------------------------------

<think>好的,我现在需要解决用户在Python中同一文件夹内的文件之间导入失败的问题。用户提到他们遇到了ImportError,但具体错误信息没有给出,不过根据之前的引用内容,可能类似于无法导入名称或者模块找不到的情况。 首先,我需要回忆Python的模块导入机制。Python在导入模块时,会搜索sys.path中的路径。默认情况下,当前脚本所在的目录会被添加到sys.path中,所以同一文件夹下的模块应该可以直接导入。但有时候,如果当前工作目录或者路径设置有误,可能会导致问题。 接下来,根据用户提供的引用资料,比如引用[4]中提到,即使文件在同一目录下,也可能因为运行脚本时的当前目录不同而出现问题。例如,当从父目录运行脚本时,Python可能不会自动将子目录添加到sys.path中,导致无法找到同级模块。这时候可能需要手动添加路径,或者使用相对导入。 另外,引用[5]中的例子展示了通过添加临时路径到sys.path来解决不同目录的问题。虽然用户的情况是同一文件夹,但有时候路径问题可能类似,比如当脚本被其他位置的模块调用时,当前路径可能改变,导致无法找到模块。 可能的常见原因包括: 1. 文件命名问题,比如模块名称与Python标准库中的模块冲突。 2. 文件所在目录未被正确添加到sys.path中,尤其是在使用相对路径或项目结构复杂时。 3. 循环导入,即两个文件互相导入,导致初始化失败。 4. 使用错误的导入语句,比如应该用import module却用了from module import something,而something可能不存在。 5. 存在__init__.py文件,在Python 3.3之后虽然不需要,但某些情况下可能需要它来声明包结构。 接下来,我需要整理这些可能性,逐一给出解决方案。例如,检查文件命名是否冲突,确保当前目录在sys.path中,检查导入语句是否正确,处理循环导入,以及考虑添加__init__.py文件。 另外,用户提供的引用[3]和[4]中提到,可以通过修改sys.path来添加父目录或所需路径,但同一文件夹的情况下可能不需要这样做,除非运行的位置不同。例如,如果用户是从另一个目录运行脚本,当前目录可能不是脚本所在的目录,这时候需要动态获取脚本路径添加到sys.path中,如引用[3]中的示例。 总结解决方案步骤: 1. 确保文件名没有与内置模块冲突。 2. 检查运行脚本时的当前工作目录,必要时添加正确的路径到sys.path。 3. 使用正确的导入语法,相对导入或绝对导入。 4. 处理可能的循环依赖。 5. 在需要的情况下添加__init__.py文件(虽然Python 3中可能不需要,但有时有助于明确包结构)。 可能还需要建议用户检查具体的错误信息,例如ImportError的具体内容,以便更准确地定位问题。比如,如果是“ModuleNotFoundError”,说明Python找不到模块,可能是路径问题;如果是“ImportError: cannot import name”,则可能是循环导入或导入时机的问题。 此外,用户案例中的引用[4]提到,即使文件在同一目录,也可能需要将目录标记为源根(如在PyCharm中),或者使用相对导入。例如,在model.py中导入attention.py,可能需要使用from . import attention,特别是在作为包的一部分时,但这也取决于项目的结构和运行方式。 最后,需要将这些思考整理成用户容易理解的步骤,提供示例代码,如如何正确导入,如何动态添加路径,如何避免循环导入等。</think>### Python同一文件夹文件间import失败的原因及解决方案 #### 常见原因分析 1. **运行路径错误** 执行脚本时所在目录与文件实际路径不一致,导致Python无法正确识别模块位置[^3][^5]。例如从父目录运行子目录中的脚本时,可能无法识别同级文件。 2. **命名冲突** 模块文件名与Python标准库或第三方库重名(如`sys.py`、`math.py`),导致导入冲突[^4]。 3. **导入语法错误** 未正确使用绝对导入或相对导入语法。例如在包内模块中未使用相对导入(`from . import module`)。 4. **循环导入** 文件A导入文件B,同时文件B又导入文件A,导致初始化失败。 --- #### 解决方案步骤 1. **检查文件命名** - 避免使用与内置模块相同的文件名(如`random.py`、`os.py`)。 - 确保文件名不包含特殊字符(如空格、连字符)。 2. **验证当前工作目录** - 在脚本开头打印当前路径,确认运行位置是否与文件所在目录一致: ```python import os print(os.getcwd()) # 输出当前工作目录 ``` - 动态添加文件所在路径到`sys.path`: ```python import os, sys current_dir = os.path.dirname(os.path.abspath(__file__)) sys.path.append(current_dir) # 确保当前目录在搜索路径中[^3] ``` 3. **使用正确的导入语法** - **绝对导入**:直接通过文件名导入(需确保路径正确) ```python import module_name # 导入module_name.py ``` - **相对导入**(适用于包内模块): ```python from . import module_name # 同一目录下 ``` 4. **处理循环导入** - 将公共代码拆分到第三个文件中。 - 延迟导入(在函数内部导入): ```python def func(): import module_b # 需要时再导入 ``` 5. **添加__init__.py文件** 在文件夹中创建空文件`__init__.py`,声明为Python包(Python 3.3+非必需,但建议保留)。 --- #### 示例场景 假设目录结构为: ``` project/ ├── src/ │ ├── model.py │ └── attention.py └── train.py ``` **错误情况**: 在`model.py`中直接`import attention`,运行`train.py`时报错`ModuleNotFoundError`。 **修正方法**: 在`model.py`中动态添加路径: ```python import os, sys sys.path.append(os.path.dirname(__file__)) # 确保src目录在路径中 import attention # 或 from . import attention ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值