Django - экспорт одного txt файла на строку на локальный диск
Я застрял с этим, так как не могу найти никаких соответствующих учебников в Интернете. Я хотел бы
- export all of the data in a model to the txt file format {actually xml but I think that's besides the point}
- where each row in the model is a seperate file
- and saved to a relative local path to the database
- with the folder and filenames for each being derived from two fields in the model
- 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 файла будет выглядеть следующим образом.
<tag>{{ misc.title }}</tag>
Похоже, что вам не нужен 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 и задача решена! 🙌
Старый ответ:
Можете ли вы еще раз уточнить весь конвейер данных с необходимыми артефактами? Например:
- У меня есть такой ряд(ы) в Excel...(пример)
- Я хочу прочитать каждую строку и ...
- Я хочу обработать каждую строку следующим образом...
- Я хочу сохранить это в ..., который будет использоваться для ...
🙌