将.txt文件的名称放入列表中

时间:2016-04-12 17:04:42

标签: python python-3.x for-loop

这是我的代码,来自这个网站:

import os
for file in os.listdir("C:\\"):
    if file.endswith(".txt"):
        file = file.strip(".txt")
        print(file)

它很棒,但我希望能够操纵我的结果并将它们存储到列表中,我不知道该怎么做。它可能非常简单,完全错过了我,我有点像菜鸟。谢谢:))

编辑:

我删除了readlines部分,这并不意味着在那里。 我想要做的是获取文件夹中每个.txt文件的名称,在这种情况下文件夹是C:\

2 个答案:

答案 0 :(得分:2)

incBrain的几种替代品(完全没问题)answer

首先,要简化您自己的代码而不是重新发明轮子,请使用glob.glob

import os  # Pre-3.5, you'd import and use the scandir module from PyPI

# Use file.path[:-4] to store the full path (sans .txt extension)
# where file.name[:-4] only gets the file name without the path or extension
onlytxt = [file.name[:-4] for file in os.scandir('C:\\') if file.name.endswith('.txt')]

或者在Python 3.5+(或使用PyPI的import os from operator import attrgetter components = map(os.path.splitext, map(attrgetter('name'), os.scandir('C:\\'))) onlytxt = [root for root, ext in components if ext == 'txt'] 模块的任何Python版本)上获得更高的性能:

os.scandir

或者对于真正的荒谬,将更多工作推送到C层并通过拆分扩展一次而不是一次检查来避免冗余,然后再剥离它的另一个操作:

os.listdir
在这种情况下,

list对你没有太大帮助(你没有阅读它可能为你检查的任何属性),但是在一个较大的目录中,这意味着你没有存储所有的条目一旦({{1}}和大多数其他API在您有机会过滤之前首先将目录的完整内容读入{{1}},所以当匹配的文件很少时,峰值内存的使用会减少。

答案 1 :(得分:1)

可能你想要这样的东西:

import os
allfiles = os.listdir('C:\\')
onlytxt = [x for x in allfiles if x.endswith('.txt')]
print onlytxt

如果您不希望列表中包含.txt,请执行以下操作:

onlytxt = [x[:-4] for x in allfiles if x.endswith('.txt')]