1

我想编写一个 Python 脚本来搜索当前目录中的所有文件夹,查找所有.txt文件,并创建一个文件,该文件是当前目录中所有这些文件(以任何顺序)的串联。如果文件夹有子文件夹,则不应搜索这些子文件夹。一个例子是

main_folder
  folder_1
    sub_folder
      file1.txt
    file2.txt
  folder_2
    file3.txt

脚本放置在main_folder. 它应该创建一个文件,该文件是file2.txtfile3.txt(以任何顺序)在main_folder.

我的问题是:如何告诉 Python 遍历文件夹、查找.txt文件而不进入子文件夹?

4

4 回答 4

3

使用glob

>>> import glob
>>> glob.glob('main_folder/*/*.txt')
['main_folder/folder_1/file2.txt', 'main_folder/folder_2/file3.txt']
于 2012-11-05T05:04:59.233 回答
1

文档

topdownTrue时,调用者可以就地修改dirnames列表(可能使用del或切片赋值),并且walk()只会递归到名称保留在dirnames中的子目录;这可以用来修剪搜索,强制执行特定的访问顺序,甚至可以在调用者再次walk()恢复之前通知调用者创建或重命名的目录walk()

于 2012-11-05T04:58:16.630 回答
1

使用选项设置为 True的os.walk()函数。topdown删除dirnames返回元组中的所有内容:

for root, dirs, files in os.walk('/base/dir', topdown=True):
    del dirs[:]
...
于 2012-11-05T05:06:25.993 回答
0

如果您使用的是基于 Unix 的系统.. 我认为最简单的方法是使用findcat使用 pythonsubprocess模块,就像这样。使用find-depth选项确实有帮助,例如,用于-depth +3查找深度 >= 3 的所有文件

>>> import subprocess
>>> lst = subprocess.check_output('find . -name "*.txt" -depth 2', shell=True)
>>> print lst
./folder_1/f1.txt
./folder_2/f2.txt 
>>> out_f = subprocess.check_output('cat '+lst.replace('\n', ' '), shell=True)
>>> print out_f
inside Folder_1
inside Folder 2

shell=True您可以通过单独提供每个参数来避免。

于 2012-11-05T05:24:51.660 回答