python-3.x - IndexError:列表索引超出范围(shutil)
问题描述
我使用此代码将具有 .png 扩展名的图像从 src 目录(及其子目录)复制并重命名到 dst 目录,但出现此错误。
当我在 Windows 上尝试代码时,它显示权限被拒绝错误,当我在 Ubuntu 上尝试时,它显示此错误,如标题中所述。
import os
import shutil
import pandas as pd
lst_files = []
for dir_name,sub_dir_list, file_list in os.walk('MURA-v1.1/valid /XR_WRIST/'): #For all body parts in train & valid sets
for file_name in file_list:
if ".png" in file_name.lower():
lst_files.append(os.path.join(dir_name, file_name))
for i in range (len(lst_files)):
a, b, c = lst_files[i].split('\\')[0], lst_files[i].split('\\')[1], lst_files[i].split('\\')[2]
lst_files[i] = a + '/' + b + '/' + c
id, bin, img = lst_files[i].split('/')[-3], lst_files[i].split('/')[-2], lst_files[i].split('/')[-1]
src = lst_files[i]
dest = '/home/mahmood/Desktop/MURA-v1.1/valid/WRIST/'
#os.chdir(dest)
stt=id+"_"+bin+"_"+img
shutil.copy(src,dest)
shutil.move(dest+c,dest+stt)
#os.rename(img, stt)
Traceback (most recent call last):
File "Data_restructure.py", line 14, in <module>
a, b, c = lst_files[i].split('\\')[0], lst_files[i].split('\\')[1], lst_files[i].split('\\')[2]
IndexError: list index out of range
解决方案
代码中的错误是由于您在 中使用 Linux/Unix 样式路径(具有/
作为目录分隔符)os.walk()
,并试图替换\
它的反斜杠,这通常是不可能的。
您的代码打算做的是:-
- 在给定目录中查找并查找文件名中包含
.png
的文件 - 找到一个后,将文件的位置添加到您的列表中
lst_files
稍后在您的代码中,您尝试lst_files
按字符串拆分列表中文件的位置\
,这是不可能的。为什么?
因为,您列表中的目录位置将具有类似于 的语法root_dir/sub_dir/filename.ext
,正如您所看到的文件名中没有反斜杠(并且在 Linux 中如何将 a/
用作目录分隔符)。因此,当您尝试操作lst_files[i].split('\\')[0]
时,总是会出现索引错误,因为字符串永远不会拆分(因为它通常不包含 a \
)。
整改:-
如果您打算在 Linux 操作系统上使用此程序,请更改lst_files[i].split('\\')[0]
为lst_files[i].split('/')[0]
一些改进:-
您使用错误的方法来查找文件是否具有.png
扩展名。在您的代码中,如果文件名是abed.png.going.txt
(名称中包含.png
子句的文本文件),该文件也将被视为.png
代码中的文件,这显然是不正确的。而是使用os.path.splitext()
它获取文件位置并分别返回包含其文件名及其扩展名的列表。
推荐阅读
- java - 从 REST-Assured 中的 XML 响应中获取值
- ios - 自签名的 IOS 应用程序在关机或时间段后无法启动
- google-calendar-api - 已超出未经身份验证使用的 Google 日历 Webhook 有效负载每日限制
- c# - EF core + Automapper ID-only相关实体集合,怎么做?
- c# - 如何在返回值之前等待回调完成?
- java - Springfox 复制控制器
- c# - 如何使用参数中的函数作为过滤器?
- css - 如何在两个 < > 之间放置文字(如这张照片)?
- amazon-quicksight - Calculate percent of total taking duplication into account
- cassandra-3.0 - 使用 jdk 13 在 mac 上安装时出现 cassandra 错误