python常用代码块 | 文件/文件夹是否存在;判断是文件还是文件夹;遍历文件夹下的文件

该文介绍了如何使用Python的os模块来检查文件夹和文件是否存在。如果文件夹不存在,会创建它;如果文件已存在,则在文件名后添加编号以避免覆盖。同时,文章提供了遍历文件夹的不同方法,包括os.walk和os.listdir。
import os
#判断文件夹是否存在,不存在则创建
def isDirExist(dirPath):
  if not os.path.exists(dirPath):
    os.makedirs(dirPath)
    #print('文件夹创建成功--'+ dirPath)


#判断文件是否存在,若存在则在末尾增加-0/-1/-2...等
#确保路径中各个文件夹名称不能带有'.',如'd:\pic.zip\123.png' 该路径则会执行错误
def isFileExist(filePath):
  num = 0
  fileType = filePath.split('.')[-1]
  fileStr = filePath.split('.' + fileType)[0]
  while True:
    if os.path.exists(filePath):
      filePath = fileStr + '-' + str(num) + '.' + fileType
      num += 1
    else:
      #print('可生成文件', filePath)
      break
  return filePath
#判断是文件夹还是文件
import os
os.path.isfile(path)
os.path.isdir(path)
#遍历文件夹中的文件
improt os
#方案1: os.walk, 多层文件夹里的文件也可读取
for root, dirs, files in os.walk(path):
  for file in files:
    fpath = os.path.join(root, file)
    print(fpath)

#方案2:os.listdir  只能列出path下的文件/文件夹,path中文件夹里的文件无法读取
files = os.listdir(path)
for file in files:
	fpath = os.path.join(path, file)
	print(fpath)


#方案3:glob 同listdir, 也无法获取到多级文件夹下的文件
import glob
input_path = r'd:\pic'
img_list=[]
if os.path.isfile(input_path):
    img_list = [input_path]
else:
    img_list = sorted(glob.glob(os.path.join(input_path, '*')))
print(img_list)


<think> 首先,用户的问题是:“我想查找使用Python遍历文件夹下所有文件并包含文件路径的方法 请问Python遍历文件夹下所有文件并获取文件路径的方法”。这明确表示用户想要Python代码来遍历文件夹中的所有文件,并获取每个文件的完整路径。 我需要参考提供的站内引用: - 引用[1]:介绍了遍历文件夹的基本步骤,包括导入模块、定义路径、使用`os.listdir()`,检查文件或子文件夹,递归遍历文件夹(可选),以及处理文件内容。 - 引用[2]:具体展示了如何使用`os.listdir()`结合`os.path.join()`获取完整路径,并区分文件目录。 - 引用[3]:似乎无关紧要,提到了李刚老师的Python课程,但内容是关于文件读取的异常处理,并不直接相关到遍历文件夹路径。 用户上一次的问题回答:用户直接从系统指令开始提问,没有历史上下文,所以这是第一个问题。系统指令要求回答结构清晰,帮助用户逐步解决问题,并尽量保证真实可靠。 关键点:用户需要遍历文件夹下所有文件并包含文件路径。引用[2]中提到了使用`os.listdir()``os.path.join()`来获取完整路径。 我应该提供完整的解决方案: - 导入必要的模块:`os` - 定义文件夹路径 - 使用`os.listdir()`获取列表 - 使用`os.path.join()`构造完整路径 - 处理文件文件夹,包括递归遍历文件夹(因为用户说的是“所有文件”,包括子文件夹中的文件)。 引用[1]中提到递归遍历文件夹可选,所以为了获取所有文件,我需要实现递归。 最佳方法是使用`os.walk()`,因为它会自动递归遍历所有子文件夹。引用中没有提到`os.walk()`,但它在Python中是标准方法。 参考引用: - 引用[1]:使用递归遍历文件夹。 - 引用[2]:展示了`os.listdir()`但没有递归。 为了完整遍历所有文件,我应该使用`os.walk()`或手动递归。 在回答中,我应该: - 结构清晰,逐步解释。 - 使用中文回答。 - 遵循LaTeX格式:行内数学表达式用$...$,独立公式用$$...$$(但在这个上下文中可能不需数学表达式,主要代码)。 - 生成相关问题(作为最后部分)。 - 在引用的段落末尾添加引用标识,但由于这是用户提供的引用,我应该引用它们。 系统指令说:“回答中引用的段落末尾自然地添加引用标识”,意思是如果我用别人的内容,要引用。但这里的引用是用户提供的,我需要引用它们。 在回答中,我应该基于引用提供信息。 代码格式:使用代码块,如示例中所示。 最终回答结构: - 简要介绍方法。 - 提供代码示例。 - 解释代码步骤。 - 添加相关问题。 步骤: 1. 导入模块:`import os` 2. 定义路径:`folder_path = '/path/to/folder'` 3. 使用`os.walk()`遍历所有文件文件夹。 `os.walk()`返回一个生成器,每个条目包含当前路径、子文件夹列表、文件列表。 然后我可以构造每个文件的完整路径:`os.path.join(root, file)` 或者使用递归方法,但`os.walk()`更简单。 引用[1]提到递归遍历可选,引用[2]使用非递归。 为了最佳实践,我将使用`os.walk()`。 代码示例: ```python import os # 定义要遍历文件夹路径 folder_path = '/path/to/your/folder' # 使用os.walk()遍历所有文件文件夹 for root, dirs, files in os.walk(folder_path): for file in files: # 获取文件的全路径 file_path = os.path.join(root, file) print(file_path) # 或者执行其他操作 ``` 或者,如果需要更简单的,用递归函数。 但`os.walk()`是标准方法。 在解释中,参考引用。 例如: 基于引用[1][2],我们可以使用`os.listdir()`结合递归来遍历所有文件夹,但更高效的方法是使用`os.walk()`函数。 引用中没有提到`os.walk()`,所以我可以引入它作为更好的替代。 引用[3]无关,忽略。 添加引用标识:在相关部分末尾添加[^1]或[^2]。 例如: “我们可以使用`os.listdir()`函数获取文件夹中的文件列表,并进行递归处理[^1]。然而,使用`os.walk()`可以更简洁地实现[^2]。” 但引用[2]没有提到`os.walk()`,所以可能不准确。 安全起见,基于提供的引用构建。 从引用[1]: - 导入os模块 - 定义路径 - 使用os.listdir() - 检查每个项目是否文件或目录 - 如果是目录,递归调用自身 从引用[2]:使用os.path.join()获取完整路径。 所以,我可以提供一个递归函数。 代码示例: ```python import os def list_all_files(folder_path): # 获取所有文件文件夹 items = os.listdir(folder_path) for item in items: full_path = os.path.join(folder_path, item) if os.path.isfile(full_path): print(full_path) # 文件路径 elif os.path.isdir(full_path): list_all_files(full_path) # 递归调用 # 使用示例 folder_path = '/path/to/folder' list_all_files(folder_path) ``` 这符合引用。 然后,在解释中引用它们。 例如: “根据引用[1],我们可以导入必要的模块并使用递归遍历文件夹[^1]。结合引用[2],我们可以使用os.path.join()来获取文件的完整路径[^2]。” 最后,生成相关问题。 相关问题基于主题:Python文件遍历。 例如: 1. 如何使用Python过滤遍历出的特定文件类型? 2. Python中os.walk()递归遍历哪个性能更好? 3. 如何处理遍历文件时的权限问题? 确保回答真实可靠:代码是标准Python代码。 </think> ### Python遍历文件夹下所有文件并获取文件路径的方法 要使用Python遍历文件夹下的所有文件(包括子文件夹中的文件)并获取每个文件的完整路径,我们可以采用递归方法或使用内置函数`os.walk()`。下面我将基于您提供的参考引用[^1][^2],逐步解释如何实现。核心方法是:导入`os`模块,定义路径,获取文件列表,并使用`os.path.join()`构造完整路径。递归遍历确保覆盖所有子文件夹[^1],而`os.walk()`则提供了更简洁的解决方案[^2]。 #### 方法一:使用递归遍历(基于引用[^1][^2]) 这种方法手动实现递归,适合理解底层逻辑。引用[^1]提到需检查文件或子文件夹并递归处理[^1],引用[^2]强调使用`os.path.join()`获取完整路径[^2]。 ```python import os def list_all_files(folder_path): """ 递归遍历文件夹下所有文件,并返回文件路径列表。 :param folder_path: 要遍历文件夹路径 :return: 所有文件的完整路径列表 """ all_files = [] # 存储所有文件路径 try: # 获取当前文件夹下的所有项目(文件文件夹) items = os.listdir(folder_path) for item in items: full_path = os.path.join(folder_path, item) # 构造完整路径[^2] if os.path.isfile(full_path): all_files.append(full_path) # 如果是文件,添加到列表 elif os.path.isdir(full_path): # 如果是子文件夹,递归调用自身获取其下的所有文件 all_files.extend(list_all_files(full_path)) # 递归遍历[^1] return all_files except PermissionError: print(f"权限不足,无法访问: {folder_path}") return [] # 处理权限异常 except FileNotFoundError: print(f"文件夹存在: {folder_path}") return [] # 使用示例 folder_path = "/path/to/your/folder" # 替换为您的实际路径 files = list_all_files(folder_path) for file_path in files: print(file_path) # 打印每个文件的完整路径 ``` **代码步骤解释:** 1. **导入必要的模块**:使用`import os`来处理文件目录操作[^1]。 2. **定义函数路径**:函数`list_all_files`接收文件夹路径参数。 3. **获取项目列表**:`os.listdir(folder_path)`返回当前文件夹下的所有项目文件夹名称[^1]。 4. **构造完整路径**:`os.path.join(folder_path, item)`将项目名与路径结合,得到完整路径(如`/home/user/file.txt`)[^2]。 5. **检查文件文件夹**:`os.path.isfile()`判断是否文件;`os.path.isdir()`判断是否为子文件夹。 6. **递归遍历文件夹**:如果是文件夹,函数递归调用自身,继续遍历其内容,并将结果合并到主列表[^1]。 7. **异常处理**:添加`try-except`块处理权限不足或路径错误等情况,确保代码健壮性(引用[^3]提到文件读取异常处理的重要性,类似原则适用于此)[^3]。 **注意事项:** - 路径格式:在Windows系统中,使用反斜杠(如`C:\\Users\\folder`),或使用原始字符串(如`r"C:\Users\folder"`)避免转义问题。 - 性能:递归方法在深层文件夹结构中可能导致栈溢出,适合小型项目。对大文件夹,推荐方法二。 - 输出:代码返回文件路径列表,您可以根据需求修改(如过滤文件类型或处理文件内容)。 #### 方法二:使用`os.walk()`(更高效推荐) 尽管引用未直接提到`os.walk()`[^1][^2],但它是Python标准库的更优方案,自动处理递归,代码更简洁。 ```python import os def get_all_files(folder_path): """ 使用os.walk()遍历所有文件并获取路径。 :param folder_path: 要遍历文件夹路径 :return: 所有文件的完整路径列表 """ all_files = [] for root, dirs, files in os.walk(folder_path): for file in files: full_path = os.path.join(root, file) # 构造完整路径 all_files.append(full_path) return all_files # 使用示例 folder_path = "/path/to/your/folder" # 替换为您的实际路径 files = get_all_files(folder_path) for file_path in files: print(file_path) ``` **优点:** - 更简洁,无需手动递归。 - 性能更好,尤其适合大型文件夹。 - 直接通过`os.walk()`迭代获取根目录、子文件夹文件列表。 **总结** - 递归方法(方法一)基于引用[^1][^2],适合学习控制细节[^1][^2]。 - `os.walk()`方法(方法二)更高效,推荐用于生产环境。 - 无论哪种方法,核心是`os.path.join()`确保获取完整文件路径[^2]。如果您需要过滤文件(如仅获取`.txt`文件),可以在循环中添加条件判断
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值