如何从文件列表开始创建电影数据库



我的家庭服务器上有大量的电影(大约4000部)。这些文件都命名为Title - Subtitle (year).extension。我想创建一个数据库(即使在excel会很好)我所有的电影。该数据库应包含以下列:标题、副标题(如果存在)、年份和服务器上文件的位置(一些电影按类型或演员在文件夹中组织)。到目前为止,我有一个bash脚本,它只返回一个txt文件,其中包含每个硬盘驱动器的文件列表(每个文件包含每个硬盘驱动器的列表)。如何在我的主服务器(运行debian)上自动创建这种数据库?

使用一些电影数据库api自动检索关于电影的其他信息也会很棒,但我想这将是非常复杂的。

这是一个相当宽泛的问题,在这里不太合适(这更像是一个教程,而不是一个快速的代码问题),但这里有一些战略建议:

  • Excel将打开。csv文件,并将逗号/新行视为单元格。所以
  • 你需要迭代,可能递归地,在目录(ies)
  • 扩展路径名-如果你使用像Python这样的高级语言,这是通过标准函数实现的;然后使用正则表达式解析最后位
  • 将每个路径的格式化内容以行形式存储在列表中
  • 将该列表打印到文本文件中,每个元素用逗号连接,每行用一个新的行字符连接
  • 以。csv后缀提供上述文件,并在Excel中打开

注意,如果你真的想要一个合适的数据库,Python也是一个不错的选择——sqlite是标准安装的一部分。

干杯,祝你好运


更新:哈哈,你编辑的问题,而我回答。看起来您需要的一切都在文件名中,但是如果您打算使用元数据,这里有一个警告。如果文件中的元数据并非全部来自同一来源,那么从文件中提取元数据会变得更加棘手;并不是每种媒体类型都具有相同的元数据结构,也不是每个创建文件的应用程序都提供相同的元数据结构。因此,获取元数据的逻辑可能会变得混乱。

有什么原因你不能使用现有的程序来做这个吗?

最后你提到把它放到你的网络服务器上;再次遵从Python,向服务器发出所需请求的能力也内置在标准包中。


最终更新

Can't help you with bash;我笨手笨脚的,我也不是Python专家,但是你的目标很简单。我还没有对它进行测试——可能有一两个错字,可以把它看作是伪代码,基本上可以用python编写。

# import the standard libraries you'll need
import os # https://docs.python.org/2/library/os.html
import re # https://docs.python.org/2/library/re.html
# this function will walk your directories and output a list of file paths
def getFilePaths(directory):
    file_paths = []
    for root, directories, files in os.walk(directory):
        for filename in files:
            filepath = os.path.join(root, filename)
            file_paths.append(filepath)
    return file_paths

video_file_paths = getFilePaths("path/to/video/library")
output_to_csv = [];
for video_file in video_file_paths:
    base_path, fname = os.path.split(video_file) 
     """ This is a super simple bit of regex that, provided  your files are all formatted as
     written, will parse out title, subtitle, year and file extension. If your file names
     turn out to have more exceptions than you expect (I'd be shocked if not), you may need
     to make this part more robust, either with much more savvy regex, or else some conditional
     logic—maybe a recursive try... catch loop"""
    reg_ex = re.compile("/^(.*) - (.*) ((.*)).(.*)$/");
    # now apply the compiled regex to each path
    name_components = reg_ex.match(fname);
    """Each output is a row of your CSV file; .join() will join the 4 elements of the regex
    match (assuming, again, that your filenames are as clean as you claim), and then add
    the basepath, so you should be building, in this loop, a list with elements like:
    title, subtitle, year, file_extension, full path"""
    output_to_csv.append("{0},{1}".format(name_components.join(","), base_path));
#create the file, making sure the location is writeable
csv_doc = open("my_video_database.csv", "w");
# now join all the rows with line breaks and write the compiled text to the file
csv_doc.write( ouput_to_csv.join("n") ); 
#close  your new database
csv_doc.close()

最新更新