为什么打印了目录中的两个文件名,而列表中只扩展了一个文件的内容?
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']
>>>
希望对您有所帮助。
我是 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']
>>>
希望对您有所帮助。