用IO查找指定文件夹下(未知个子文件夹)的*.mp3文件 递归 链表(添加 查询)
时间: 2024-03-01 10:53:22 浏览: 67
查找指定目录下的文件(包括子目录)
5星 · 资源好评率100%
好的,这是一个比较复杂的问题,需要分步骤来实现。我会一步一步地教你如何实现这个功能。
首先,我们需要使用递归的方式来查找指定文件夹下的所有子文件夹。这个可以用以下的代码来实现:
```python
import os
def find_folders(root_folder):
folders = []
for dirpath, dirnames, filenames in os.walk(root_folder):
for dirname in dirnames:
folders.append(os.path.join(dirpath, dirname))
return folders
```
这个函数会返回一个列表,其中包含了指定文件夹下的所有子文件夹。
接下来,我们需要在每个子文件夹中查找所有的 *.mp3 文件。这个可以用以下的代码来实现:
```python
def find_mp3_files(folder):
mp3_files = []
for dirpath, dirnames, filenames in os.walk(folder):
for filename in filenames:
if filename.endswith('.mp3'):
mp3_files.append(os.path.join(dirpath, filename))
return mp3_files
```
这个函数会返回一个列表,其中包含了指定文件夹下的所有 *.mp3 文件。
最后,我们需要将这些文件添加到链表中,并可以通过链表进行查询。这个可以用以下的代码来实现:
```python
class Node:
def __init__(self, data):
self.data = data
self.next = None
class LinkedList:
def __init__(self):
self.head = None
def add(self, data):
if not self.head:
self.head = Node(data)
else:
current = self.head
while current.next:
current = current.next
current.next = Node(data)
def search(self, data):
current = self.head
while current:
if current.data == data:
return True
current = current.next
return False
```
这个代码定义了一个链表,可以添加数据和查询数据。我们可以将找到的 *.mp3 文件添加到链表中,然后通过链表来查询。
综合起来,完整的代码如下:
```python
import os
class Node:
def __init__(self, data):
self.data = data
self.next = None
class LinkedList:
def __init__(self):
self.head = None
def add(self, data):
if not self.head:
self.head = Node(data)
else:
current = self.head
while current.next:
current = current.next
current.next = Node(data)
def search(self, data):
current = self.head
while current:
if current.data == data:
return True
current = current.next
return False
def find_folders(root_folder):
folders = []
for dirpath, dirnames, filenames in os.walk(root_folder):
for dirname in dirnames:
folders.append(os.path.join(dirpath, dirname))
return folders
def find_mp3_files(folder):
mp3_files = []
for dirpath, dirnames, filenames in os.walk(folder):
for filename in filenames:
if filename.endswith('.mp3'):
mp3_files.append(os.path.join(dirpath, filename))
return mp3_files
root_folder = 'path/to/root/folder'
folders = find_folders(root_folder)
mp3_files_list = LinkedList()
for folder in folders:
mp3_files = find_mp3_files(folder)
for mp3_file in mp3_files:
mp3_files_list.add(mp3_file)
print(mp3_files_list.search('path/to/file.mp3'))
```
请注意,这个代码仅仅是一个示例,可能需要根据实际情况进行调整。
阅读全文