【发布时间】:2019-09-05 08:52:57
【问题描述】:
我有一个文件名列表,但没有它们的绝对路径。我正在尝试编写一个脚本,它将逐行读取文件并在给定目录中递归搜索文件。找到文件后,它会将其移动到另一个目录。这个脚本将在基于 Linux 的机器上运行,我知道如何使用 find 来完成它,我最终可以使用 subprocess 但我想知道是否有更多 Pythonic 方式来做到这一点。
这是包含文件名的文件的简短摘录:
Florida'sUltimatePilots_Ep03.mp4
MonsterFish_2016_EP8.srt
MonsterFish_2016_EP9.srt
MonsterFish_2016_EP10.srt
Chronicles_2018_EP1.mp4
Pilot Fever 2012.mp4
到目前为止,这是我的 Python 脚本:
import os
import sys
import time
import shutil
file_list = "/home/user/test/test/files_test.txt"
input_directory = "/home/user/test/in"
output_directory = "/home/user/test/out"
srt_directory = os.path.join(output_directory, "srt")
mp4_directory = os.path.join(output_directory, "mp4")
def find_abspath(filename, input_directory):
.......
return filename_abspath
with open(file_list) as flist:
for filename in flist:
if ".mp4" in filename:
# print(f"MP4: {filename}")
filename_abspath = find_abspath(filename, input_directory)
shutil.move(filename_abspath, mp4_directory)
time.sleep(60)
elif ".srt" in filename:
# print(f"SRT: {filename}")
filename_abspath = find_abspath(filename, input_directory)
shutil.move(filename_abspath, srt_directory)
所以我只需要find_abspath 函数的一些帮助。其余的我可以自己解决。问题是在这台机器上我的用户没有管理员权限,也没有连接到互联网,所以我不想为 Python 安装任何第三方库。作为备用计划,我可以尝试编写一个BASH 脚本,但可能会花费我更多的时间。
【问题讨论】:
-
我建议你看看 os.path.walk() 我相信这个函数完全符合你的要求。
-
也许这个 SO 问题可以为您指明正确的方向:stackoverflow.com/questions/2186525/…
标签: python python-3.x linux bash file