如何将搜索匹配* .txt的文件的输出保存到变量?

时间:2014-12-13 08:17:20

标签: python python-3.x

我对python很新。我想将此脚本打印的文本保存为变量。 (如果重要的话,该变量将在以后写入文件。)我该怎么做?

import fnmatch
import os

for file in os.listdir("/Users/x/y"):
    if fnmatch.fnmatch(file, '*.txt'):
        print(file)

5 个答案:

答案 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;)