如何使用唯一的文件名python重命名文件

时间:2019-01-28 21:19:24

标签: python-3.x sqlite rename

我正在尝试使用sql代码保存从sqlite数据库中获取的具有唯一名称的.pdf文件。

例如,我有一个名为“ boringfile.pdf”的文件,但需要将该文件重命名为唯一的员工名称“ max_steel.pdf”

我查看了os.renameos.joinuuidpdfrwreportlabs来寻找解决方案。

有人可以帮助我吗?

编辑:

为进一步说明,该数据库是使用sqlite3和python 3.6创建的。示例数据库看起来类似于:

employee_id     first_name    last_name
123456          Frank         Sinatra
738323          Johnny        Cash
842028          Bon           Jovi

因此,假设我刚刚通过从数据库中提取数据并将其输入到我的报表中来创建Bon Jovi的员工正在处理的文书工作。我的报告当前带有标签“ boringfile.pdf”,但是保存完成的文件时,我需要它读取“ bon_jovi.pdf”。

2 个答案:

答案 0 :(得分:1)

在咨询各种网站并打了几个电话之后,我找到了解决方案。创建一个sqlite3数据库后,我调用所需的信息并将其转换为一行.csv。我使用csv.reader读取数据,并使用os.rename生成唯一名称,这与上面Mark的建议非常相似。

def dataexport(self, *args, **kwargs):
    sql = "SELECT * FROM profiles WHERE last_name=? OR first_name=? OR employee_id=?"
    data = c.execute(sql, (self.last_se.get(), self.first_se.get(),
                           self.employeeid_se.get(), )) #this part is meant to grab 
                           #the user input from a gui I made to make form filling 
                           #simple
    with open('output.csv', 'w') as f:
        writer = csv.writer(f)
        writer.writerows(data)

def renamefile(self, *args, **kwargs):
    mycsv = csv.reader(open('output.csv'))
    for row in mycsv:
        employee_id = row[0]
        first_name = row[1]
        last_name = row[2]

    os.rename('boringfile.pdf', first_name + '_' + last_name + '.pdf')

output.csv

运行第一个功能后,.csv文件应为一行:

842028, Bon, Jovi

答案 1 :(得分:1)

不确定使用SQLite为何创建CSV文件然后解析CSV文件。这似乎有点画蛇添足。您可以像这样直接进行操作(无错误检查,仅是概念):

import sqlite3

# Connect to database
db = sqlite3.connect('sample.db')

# Extract person's full name
sql = "SELECT * FROM profiles WHERE last_name=? OR first_name=? OR employee_id=?"
c = db.cursor()
data = c.execute(sql, ('Jovi','Bon','842028'))

# Rename PDF
for row in c:
    print('{0} : {1}, {2}'.format(row[0], row[1], row[2]))
    PDFname = row[1] + '_' + row[0] + '.pdf'

os.rename('boringfile.pdf', PDFname)