【问题标题】:list all files in directory under different user python列出不同用户python下目录中的所有文件
【发布时间】:2020-12-01 22:34:50
【问题描述】:

我需要列出 python 3.7.5 目录中文件的绝对路径。现在的问题是这里指定的解决方案都不起作用:

Get absolute paths of all files in a directory

可能是因为我登录到不同的用户并且我的主目录发生了变化:sudo su - my_user_name

这样的解决方案:

files = [Path(x).absolute() for x in os.listdir(source_folder)]

files = [os.path.abspath(x) for x in os.listdir(source_folder)]

导致将当前工作目录附加到正确找到的文件名。因此,如果我列出目录:/other_home/data/gene_data(其中有一个名为my_file.tsv 的文件),但我在某些/new_home/def/cram/my_project_name 中,则上述解决方案会生成路径:/new_home/def/cram/my_project_name/my_file.tsv 而不是/other_home/data/gene_data/my_file.tsv。还有办法实现吗?

【问题讨论】:

    标签: python path


    【解决方案1】:

    os.listdir 返回不带路径的文件名,使其成为基于source_folder 的相对路径。 os.path.abspath 不知道 source_folder。它只知道当前的工作目录。因此,它假定 CWD 是您希望成为绝对路径的相对路径。

    你可以先加入已知路径组件,然后再使其成为绝对路径

    files = [os.path.abspath(os.path.join(source_folder, x)) 
                for x in os.listdir(source_folder)]
    

    使用Path 时,您会遇到类似的问题。您从缺少路径组件的文件名创建了路径,因此Path 假定您指的是当前工作目录。而是让Path 为您进行目录枚举,以便它传回正确限定的Path 对象。

    files = [x.absolute() for x in Path(source_folder).glob("*")]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-13
      • 1970-01-01
      • 2014-10-10
      • 1970-01-01
      • 2017-02-16
      相关资源
      最近更新 更多