使用python代码获取文件路径,而.absolute()不符合我的答案



我使用的是Linux系统,使用python代码提取USB文件路径。

仅提取USB路径

来自

sdb1 8:17 1 3.8G 0部件/媒体/joy/DATA
sdg1 8:97 1 29.4G 0部件/媒介/joy/DATA2
sdh1 8:113 1 1.9G 0部件/媒介/joe/DATA1

到我的预期输出:

/media/joy/DATA
/media/joy/DATA2
/media/joy/DATA1

.absolute(file_name)正在获得/home/joy/file_name,这不是我想要的/media/joy/DATA

我上来的时候,我尝试在paython中调用linux命令lsblk,并使用带有关键字"的正则表达式/媒体/欢乐";为了过滤欲望路径,不知怎么的,我有股票

尝试过的代码:

import os
import subprocess
a = subprocess.check_output(['lsblk'])
str_a = str(a)
# I split by "n" cause that in erery line of str_a
str_a_splited = str_a.split("n")

USB_info = [s for s in str_a_splited if "/media/joy" in s]

print("=  =   =   =   ")
print(USB_info)                     

这是尝试过的代码的输出:

=  =   =   =   
["b'NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS\nloop0    7:0    0     4K  1 loop /snap/bare/5\nloop1    7:1    0  45.9M  1 loop /snap/snap-store/582\nloop2    7:2    0    62M  1 loop /snap/core20/1587\nloop3    7:3    0 114.9M  1 loop /snap/core/13741\nloop4    7:4    0 729.4M  1 loop /snap/pycharm-professional/302\nloop5    7:5    0   284K  1 loop /snap/snapd-desktop-integration/14\nloop6    7:6    0    48M  1 loop /snap/snapd/16778\nloop7    7:7    0 346.3M  1 loop /snap/gnome-3-38-2004/115\nloop8    7:8    0  91.7M  1 loop /snap/gtk-common-themes/1535\nloop9    7:9    0  55.6M  1 loop /snap/core18/2566\nloop10   7:10   0 140.8M  1 loop /snap/skype/226\nloop11   7:11   0  63.2M  1 loop /snap/core20/1623\nloop12   7:12   0   115M  1 loop /snap/core/13886\nloop13   7:13   0  45.9M  1 loop /snap/snap-store/599\nloop14   7:14   0 238.1M  1 loop /snap/firefox/1918\nloop15   7:15   0 237.3M  1 loop /snap/firefox/1883\nloop16   7:16   0  37.1M  1 loop /snap/hunspell-dictionaries-1-7-2004/2\nloop17   7:17   0    48M  1 loop /snap/snapd/17029\nloop18   7:18   0 164.8M  1 loop /snap/gnome-3-28-1804/161\nloop19   7:19   0 346.3M  1 loop /snap/gnome-3-38-2004/119\nsda      8:0    0 931.5G  0 disk \n\xe2\x94\x9c\xe2\x94\x80sda1   8:1    0     1M  0 part \n\xe2\x94\x9c\xe2\x94\x80sda2   8:2    0   513M  0 part /boot/efi\n\xe2\x94\x94\xe2\x94\x80sda3   8:3    0   931G  0 part /var/snap/firefox/common/host-hunspell\n                                 /\nsdb      8:16   1   3.8G  0 disk \n\xe2\x94\x94\xe2\x94\x80sdb1   8:17   1   3.8G  0 part /media/joy/DATA\nsdc      8:32   1     0B  0 disk \nsdd      8:48   1     0B  0 disk \nsde      8:64   1     0B  0 disk \nsdf      8:80   1     0B  0 disk \nsdg      8:96   1  29.4G  0 disk \n\xe2\x94\x94\xe2\x94\x80sdg1   8:97   1  29.4G  0 part /media/joy/DATA2\nsdh      8:112  1   1.9G  0 disk \n\xe2\x94\x94\xe2\x94\x80sdh1   8:113  1   1.9G  0 part /media/joy/DATA1\nsr0     11:0    1  1024M  0 rom  \nsr1     11:1    1  1024M  0 rom  \n'"]

linux命令lsblk:

NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
loop0    7:0    0     4K  1 loop /snap/bare/5
loop1    7:1    0  45.9M  1 loop /snap/snap-store/582
loop2    7:2    0    62M  1 loop /snap/core20/1587
loop3    7:3    0 114.9M  1 loop /snap/core/13741
loop4    7:4    0 729.4M  1 loop /snap/pycharm-professional/302
loop5    7:5    0   284K  1 loop /snap/snapd-desktop-integration/14
loop6    7:6    0    48M  1 loop /snap/snapd/16778
loop7    7:7    0 346.3M  1 loop /snap/gnome-3-38-2004/115
loop8    7:8    0  91.7M  1 loop /snap/gtk-common-themes/1535
loop9    7:9    0  55.6M  1 loop /snap/core18/2566
loop10   7:10   0 140.8M  1 loop /snap/skype/226
loop11   7:11   0  63.2M  1 loop /snap/core20/1623
loop12   7:12   0   115M  1 loop /snap/core/13886
loop13   7:13   0  45.9M  1 loop /snap/snap-store/599
loop14   7:14   0 238.1M  1 loop /snap/firefox/1918
loop15   7:15   0 237.3M  1 loop /snap/firefox/1883
loop16   7:16   0  37.1M  1 loop /snap/hunspell-dictionaries-1-7-2004/2
loop17   7:17   0    48M  1 loop /snap/snapd/17029
loop18   7:18   0 164.8M  1 loop /snap/gnome-3-28-1804/161
loop19   7:19   0 346.3M  1 loop /snap/gnome-3-38-2004/119
sda      8:0    0 931.5G  0 disk 
├─sda1   8:1    0     1M  0 part 
├─sda2   8:2    0   513M  0 part /boot/efi
└─sda3   8:3    0   931G  0 part /var/snap/firefox/common/host-hunspell
/
sdb      8:16   1   3.8G  0 disk 
└─sdb1   8:17   1   3.8G  0 part /media/joy/DATA
sdc      8:32   1     0B  0 disk 
sdd      8:48   1     0B  0 disk 
sde      8:64   1     0B  0 disk 
sdf      8:80   1     0B  0 disk 
sdg      8:96   1  29.4G  0 disk 
└─sdg1   8:97   1  29.4G  0 part /media/joy/DATA2
sdh      8:112  1   1.9G  0 disk 
└─sdh1   8:113  1   1.9G  0 part /media/joy/DATA1
sr0     11:0    1  1024M  0 rom  
sr1     11:1    1  1024M  0 rom  

我对您的代码做了一些更改,现在它如您所期望的那样工作:

import os
import subprocess
a = subprocess.check_output(['lsblk'])

# I split by "n" cause that in erery line of str_a
str_a_splited = a.split("n")

USB_info = [s for s in str_a_splited if "/media/" in s]
found_path = []
for x in USB_info:
for s in x.split(" "):
if "/media/" in s:
found_path.append(s)

print("=  =   =   =   ")
print(found_path)

并且您不需要将subprocess的输出转换为str,因为它默认为str格式。我在我的电脑上测试了这个,效果很好。

如果TypeError弹出,我会添加.decode()

import os
import subprocess
a = subprocess.check_output(['lsblk'])

# I split by "n" cause that in erery line of str_a
str_a_splited = a.decode().split("n")

USB_info = [s for s in str_a_splited if "/media/" in s]
found_path = []
for x in USB_info:
for s in x.split(" "):
if "/media/" in s:
found_path.append(s)

print("=  =   =   =   ")
print(found_path)

最新更新