为什么打印了目录中的两个文件名,而列表中只扩展了一个文件的内容?

Why are both filenames in directory printed while only content of one file is extended in the list?

我是 Python 的新手,我相信对于你们大多数人来说,这个错误是显而易见的。我尝试使用 os.listdir() 遍历文件夹。只有带有 .out 的文件名很重要。我想通过每个 *.out 文件的每个条目扩展列表 out = []。为了检查我的 if 循环是否有效,我打印了文件名(打印了两个文件名),但列表 out = [].

中只扩展了一个文件的内容
out = []

for filename in os.listdir(path):
    if filename.endswith('.out'):
        print(filename)
        with open(filename) as f:
            out.extend(f)

正如我在其中一条评论中所说,如果您使用的是 Python 3.4+,pathlib 会让您的生活轻松很多。

要从文件夹 folder 中获取所有以 .out 结尾的文件名的列表,您只需执行以下操作:

from pathlib import Path

folder = Path('folder')

outs = [_.name for _ in folder.glob('*.out')]

就是这样。

如果您想用所有 *.out 个文件内容填充名为 lines 的列表,您只需:

from pathlib import Path

folder = Path('folder')

lines = []

lines.extend([_.read_text().split() for _ in folder.glob('*.out')])

这是一个小的概念证明:

$ tree temp
temp
├── file1.out
├── file2.out
├── file3.txt
└── file4.txt

0 directories, 4 files
$ 

Python 3.7.5 (default, Dec 15 2019, 17:54:26) 
[GCC 9.2.1 20190827 (Red Hat 9.2.1-1)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from pathlib import Path
>>> folder = Path('temp')
>>> outs = [_.name for _ in folder.glob('*.out')]
>>> txts = [_.name for _ in folder.glob('*.txt')]
>>> outs
['file1.out', 'file2.out']
>>> txts
['file3.txt', 'file4.txt']
>>> 

这是另一种连接内容的方法:

$ cat temp/file1.out 
1
2
3
4
$ cat temp/file2.out 
5
6
7
8
$ 
>>> lines = [l for _ in folder.glob('*.out') for l in _.read_text().split()]
>>> lines
['1', '2', '3', '4', '5', '6', '7', '8']
>>> 

希望对您有所帮助。