Warm tip: This article is reproduced from serverfault.com, please click

path-列出不同用户python下目录中的所有文件

(path - list all files in directory under different user python)

发布于 2020-12-01 22:34:50

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

获取目录中所有文件的绝对路径

可能是因为我登录到其他用户并且我的主目录更改了: 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还有办法实现吗?

Questioner
Nikita Vlasenko
Viewed
0
tdelaney 2020-12-02 06:46:46

os.listdir返回不带路径的文件名,这使它成为基于的相对路径source_folderos.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("*")]