Как переименовать файл с уникальным именем файла python - PullRequest
0 голосов
/ 29 января 2019

Я пытаюсь сохранить файл .pdf с уникальным именем, извлеченным из базы данных sqlite с использованием кода Python.

Например, у меня есть файл с именем "boringfile.pdf", но мне нужно переименовать этот файл в уникальное имя сотрудника, "max_steel.pdf"

Я посмотрел на os.rename, os.join, uuid, pdfrw и reportlabs для решения.

Кто-нибудь может мне помочь?

РЕДАКТИРОВАТЬ:

Для дальнейшего уточнения база данных создается с использованием 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 голосов
/ 30 января 2019

Не уверен, почему вы используете 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)
0 голосов
/ 30 января 2019

Я нашел решение, посмотрев несколько веб-сайтов и позвонив нескольким людям.После создания базы данных sqlite3 я вызываю нужную информацию и преобразую ее в одну строку .csv.Я использую csv.reader для чтения данных и использую os.rename для генерации уникального имени, очень похожего на предложение Марка, приведенное выше.

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

...