我对python很新。我想将此脚本打印的文本保存为变量。 (如果重要的话,该变量将在以后写入文件。)我该怎么做?
import fnmatch
import os
for file in os.listdir("/Users/x/y"):
if fnmatch.fnmatch(file, '*.txt'):
print(file)
答案 0 :(得分:3)
您可以将其存储在列表中:
import fnmatch
import os
matches = []
for file in os.listdir("/Users/x/y"):
if fnmatch.fnmatch(file, '*.txt'):
matches.append(file)
答案 1 :(得分:3)
你可以将它存储在这样的变量中:
import fnmatch
import os
for file in os.listdir("/Users/x/y"):
if fnmatch.fnmatch(file, '*.txt'):
print(file)
my_var = file
# do your stuff
或者您可以将其存储在列表中供以后使用:
import fnmatch
import os
my_match = []
for file in os.listdir("/Users/x/y"):
if fnmatch.fnmatch(file, '*.txt'):
print(file)
my_match.append(file) # append insert the value at end of list
# do stuff with my_match list
答案 2 :(得分:3)
已经提供的两个答案都是正确的,但Python提供了一个不错的选择。由于遍历数组并附加到列表是一种常见的模式,因此列表理解被创建为该过程的一站式商店。
import fnmatch
import os
matches = [filename for filename in os.listdir("/Users/x/y") if fnmatch.fnmatch(filename, "*.txt")]
答案 3 :(得分:2)
虽然NSU的答案和其他人都非常好,但可能是一种更简单的方式来获得你想要的东西。
就像fnmatch
测试某个文件是否与shell样式的通配符匹配一样,glob
列出了与shell样式通配符匹配的所有文件。事实上:
这是通过一致使用
os.listdir()
和fnmatch.fnmatch()
函数来完成的。
所以,你可以这样做:
import glob
matches = glob.glob("/Users/x/y/*.txt")
但请注意,在这种情况下,您将获得完整的路径名,例如'/Users/x/y/spam.txt'
,而不仅仅是'spam.txt'
,这可能不是您想要的。通常情况下,当您想要显示它们时,保持完整路径名和os.path.basename
它们比仅保留基本名称和os.path.join
它们想要打开它们更容易...但是经常"不是"总是"。
另请注意,我必须手动将"/Users/x/y/"
和"*.txt"
粘贴到一个字符串中,就像在命令行中一样。这里很好,但是,如果第一个来自一个变量,而不是硬编码到源代码中,那么你必须使用os.path.join(basepath, "*.txt")
,这并非如此好的。
顺便说一句,如果您使用的是Python 3.4或更高版本,则可以从更高级别的pathlib
库中获取相同的内容:
import pathlib
matches = list(pathlib.Path("/Users/x/y/").glob("*.txt"))
答案 4 :(得分:1)
也许定义效用函数是正确的道路......
def list_ext_in_dir(e,d):
"""e=extension, d= directory => list of matching filenames.
If the directory d cannot be listed returns None."""
from fnmatch import fnmatch
from os import listdir
try:
dirlist = os.listdir(d)
except OSError:
return None
return [fname for fname in dirlist if fnmatch(fname,e)]
我已将dirlist
置于try
except
子句中以捕获
我们无法列出目录的可能性(不存在,读取
许可等)。对错误的处理有点过分了,但是......
匹配文件名列表是使用所谓的list comprehension构建的,如果您要为程序使用python
,则应尽快调查。
关闭我的帖子,一个用法示例
l_txtfiles = list_ext_in_dir('*.txt','/Users/x/y;)