我使用的是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)