这是我的代码,来自这个网站:
import os
for file in os.listdir("C:\\"):
if file.endswith(".txt"):
file = file.strip(".txt")
print(file)
它很棒,但我希望能够操纵我的结果并将它们存储到列表中,我不知道该怎么做。它可能非常简单,完全错过了我,我有点像菜鸟。谢谢:))
编辑:
我删除了readlines部分,这并不意味着在那里。 我想要做的是获取文件夹中每个.txt文件的名称,在这种情况下文件夹是C:\
答案 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')]