Django - экспорт одного txt файла на строку на локальный диск

Я застрял с этим, так как не могу найти никаких соответствующих учебников в Интернете. Я хотел бы

  1. export all of the data in a model to the txt file format {actually xml but I think that's besides the point}
  2. where each row in the model is a seperate file
  3. and saved to a relative local path to the database
  4. with the folder and filenames for each being derived from two fields in the model
  5. I also need these to replace any existing files of the same name

С чего бы мне начать? Все, что я могу сделать в настоящее время, это экспортировать txt-файл со всеми записями вместе как загружаемое вложение.

В настоящее время это работает в Excel, но я хочу вырезать шаг Excel. Вот как выглядит макрос Excel:

Sub export_misc()


Dim wb As Workbook, ws As Worksheet
Dim tags, ar, t
Dim iLastRow As Long, r As Long, n As Long
Dim c As Integer, i As Integer, k As Integer
Dim sFolder As String, sFile As String, s As String

Dim fso, ts
Set fso = CreateObject("Scripting.FilesystemObject")

tags = Array("plot:78", "dateadded:79", "title:80", "year:81", _
            "mpaa:83", "releasedate:85", "genre:380", "studio:86", ":87", ":88")

Set wb = ThisWorkbook
Set ws = wb.Sheets("Misc")
iLastRow = ws.UsedRange.Row + ws.UsedRange.Rows.Count - 1

For r = 2 To 2500
    sFolder = wb.Path & "\Misc\" & ws.Cells(r, 76).Value & "\"
    sFile = ws.Cells(r, 77).Value
    If Len(sFile) > 0 Then
        s = "<?xml version=""1.0"" encoding=""UTF-8"" standalone=""yes""?>" _
            & vbLf & "<movie>" & vbLf
        For i = 0 To UBound(tags)
            ar = Split(tags(i), ":") 'tag,column
            c = ar(1) ' data column
            t = Split(ar(0), ",") ' tree
            s = s & Space(4)
            For k = 0 To UBound(t)
                s = s & "<" & t(k) & ">"
            Next
            s = s & ws.Cells(r, c) ' value
            For k = UBound(t) To 0 Step -1
                s = s & "</" & t(k) & ">"
            Next
            s = s & vbLf
        Next
        s = s & "</movie>"
        
        ' save to file
        Set ts = fso.createTextFile(sFolder & sFile & ".nfo", 1, 1) ' overwrite, unicode
        ts.write s
        ts.Close
        n = n + 1
     End If
Next
MsgBox "Misc, " & n & " files" & sFolder, vbInformation

End Sub

Поскольку я использую SQLite, будет ли проще просто написать файл python для экспорта прямо из базы данных?

Вот поля

class misc(models.Model):
d_created = models.DateTimeField(auto_now_add=True)
filename = models.CharField(max_length=250)
fk_folder = models.ForeignKey(folder, default="1", blank=True, null=True, on_delete=models.CASCADE)
title = models.CharField(max_length=250, default='', blank=True, null=True)
d_released = models.CharField(max_length=25, default='', blank=True, null=True)
description = models.TextField(blank = True, null = True)

def __str__(self):
    return self.title

class Meta:
    ordering = ('-id', )

Мне нужен текст (экранируемые теги xml), окружающий каждое поле, но я могу понять, как это сделать самостоятельно. Примером может быть

<title>{record's title field}</title>

который в виде HTML файла будет выглядеть следующим образом.

&lt;tag&gt;{{ misc.title }}&lt;/tag&gt;

Похоже, что вам не нужен Django для этой задачи (возможно).

UPD:

Используйте CSV! Ваш Excel может экспортировать данные в файл .csv - это очень простой формат и очень прост для начала работы с Python.

Разместите ваш .csv рядом с вашим скриптом python, иначе укажите полный путь к файлу:

import csv
with open('file.csv', newline='') as csvfile:
    reader = csv.reader(csvfile, delimiter=' ', quotechar='|')
    for row in reader:
        print(', '.join(row))

Проверьте, что вы можете читать данные ваших строк. Docs

Далее, давайте сделаем обработчик для ваших строк:

Здесь можно использовать построитель XML, но это не быстрый способ. Давайте сделаем что-то вроде текстового шаблона и заменим необходимые макросы значениями вашей строки, которые вы определили в начале.

f`text {param}`

Наконец, как записать это в файловую систему? Легко!

Во-первых, как создать dir или вложенные dirs? Хорошая тема здесь:

Как безопасно создать вложенный каталог?

Итак, создайте нужный dir, а затем вы можете объединить dir + имя нужного файла для создания файла:

with open("full_path_to_future_file.xml", "w") as f:
   f.write(rendered_xml_as_text)

Все эти вещи вы можете делать при итерации в вашем for row in reader: цикла, конечно.

Вызовите свой скрипт как python script.py и задача решена! 🙌

Старый ответ:

Можете ли вы еще раз уточнить весь конвейер данных с необходимыми артефактами? Например:

  1. У меня есть такой ряд(ы) в Excel...(пример)
  2. Я хочу прочитать каждую строку и ...
  3. Я хочу обработать каждую строку следующим образом...
  4. Я хочу сохранить это в ..., который будет использоваться для ...

🙌

Вернуться на верх