【问题标题】:Expanding asterisk in glob在 glob 中扩展星号
【发布时间】:2015-10-23 17:04:05
【问题描述】:

我希望能够打印 linux 目录中所有文件的列表,但我的代码只打印目录中的第一项

主目录里面是text1.txt, text2.txt, text3.txt

sys.argv[1] 在命令行上运行时应该是 /home/*

python fileName.py /home/*

脚本:

def list_file():
    listFile= glob.glob(sys.argv[1])
    return listFile

print list_file()

输出只是目录中的第一个文件

 ['text1.txt']

有什么想法吗?该代码在 Windows 上运行良好,但当我将其移至 Linux 时,它不再运行了

谢谢

【问题讨论】:

    标签: python linux glob


    【解决方案1】:

    你调用脚本的方式,* 被 Bash 本身扩展,所以说

    python fileName.py /home/*
    

    这被扩展为

    python fileName.py /home/file1 /home/file2 /home/file3
    

    所以sys.argv[1] 就是/home/file1

    要使其工作,请在 Python 脚本中添加 *

    import sys
    import glob
    
    def list_file():
        return glob.glob(sys.argv[1] + '*')
    
    print list_file()
    

    然后像python fileName.py /home/ 一样运行。

    【讨论】:

      【解决方案2】:

      由于 shell 扩展了通配符,您无需调用glob。只需打印sys.argv中的所有参数

      def list_file():
          return sys.argv[1:]
      
      print list_file()
      

      【讨论】:

        【解决方案3】:

        使用引号。 Shell 将第一个参数作为命令运行。您可以使用“print sys.argv[1]”查看此内容

        python fileName.py "/home/*"
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-05-24
          • 1970-01-01
          • 1970-01-01
          • 2011-11-05
          • 1970-01-01
          • 2019-07-30
          • 1970-01-01
          • 2017-11-01
          相关资源
          最近更新 更多