【问题标题】:Find file's absolute path from a list of file names in Python3从 Python3 中的文件名列表中查找文件的绝对路径
【发布时间】: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 脚​​本,但可能会花费我更多的时间。

【问题讨论】:

标签: python python-3.x linux bash file


【解决方案1】:

我不了解您的确切要求,但希望这可能会有所帮助

def find_abspath(filename, input_directory):
    filename = filename.rstrip('\n')
    for dir_name, subdir_list, file_list in os.walk(input_directory):
        if filename in file_list:
            filename_abspath = os.path.join(dir_name, filename)
    return filename_abspath

【讨论】:

  • 另外看看函数os.path.abspath对绝对路径进行归一化
  • @PrateekSen 它实际上不起作用,我认为您需要有一个额外的if 语句来检查文件名是否在file_list 中但是这个语句也不起作用,所以我正在努力寻找一种方法来让它发挥作用。
  • 显然filenamelist_files 中的文件是不同的,尽管它们在我看来完全一样。
  • 发现了问题,我需要像这样从文件名中删除新行:filename = filename.rstrip('\n') 然后我需要添加这样的 if 语句:if filename in files: 在加入 @ 之前987654328@ 和filename
  • 我已经更新了代码sn-p,你现在可以检查一下,希望它对你的情况有用。
猜你喜欢
  • 2011-03-18
  • 2012-10-04
  • 2011-10-01
  • 2012-08-31
  • 2011-02-02
  • 1970-01-01
  • 2020-04-10
  • 1970-01-01
相关资源
最近更新 更多