【问题标题】:How execute cat filename* in python如何在 python 中执行 cat filename*
【发布时间】:2012-08-07 16:35:56
【问题描述】:

我对 python 真的很陌生,经过几个小时的寻找我还没有找到解决方案(或者无法理解其他人提供的解决方案)。

我想检查文件夹中具有相同初始名称“pid”后跟不连续整数的多个文件的内容,以确保它们都包含“完成”一词。这些文件包含一个单词。

我最初的想法是使用

cat pid*

以某种方式将该命令的输出放入列表中,然后横向比较列表中的值

result = 'Finished'
for x in range(len(myList)):
    if 'done' not in myList[x]:
        result = 'Continue'
        break
if result == 'Finished':
    print 'Finished'

这是我的想法,但我找不到获取包含 cat 输出的列表的方法。

经过一番挖掘后,我放弃了这个想法并做了一个非常糟糕的实现(我认为)我确信必须有一个更好的解决方案

filedir = os.popen('ls','r')

for line in filedir:
    print line
    if 'pid' in line:
        filename = open(line.replace('\n', ''), 'r')
        firstline = filename.readline()
        print firstline
        if 'done' not in firstline:
            status = 'RUNNING'
            break
if status == 'DONE':
    print 'Finished'
else:
    print status

非常感谢任何帮助!

【问题讨论】:

    标签: python process wildcard cat


    【解决方案1】:

    您可以使用glob 模块,它“根据Unix shell 使用的规则查找与指定模式匹配的所有路径名”:

    import glob
    for fn in glob.glob('pid*'):
        with open(fn) as f:
            if 'done' in f.read():
                ...
    

    【讨论】:

    • 感谢您的帮助,我不知道这个 glob 类,在我正在阅读的 python 教程中遥遥领先。再次感谢!
    【解决方案2】:

    使用glob 执行通配符匹配,然后读取文件。

    请... 不要再为在 python 本身中可以轻松完成的事情调用 shell 命令

    【讨论】:

    • glob 模块在处理路径时是首选,因为fnmatch 不会单独处理斜线。虽然我很喜欢你的笔记。 ;)
    • 我不知道 glob 类,我在进入 glob 之前发现了那个 shell 命令。我对此仍然很陌生,但是缓慢而稳定=]。感谢您的回复。
    猜你喜欢
    • 1970-01-01
    • 2021-09-19
    • 1970-01-01
    • 2014-06-29
    • 2022-01-11
    • 2023-03-20
    • 2017-04-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多