У меня есть система в Джанго, которая используется для хранения данных опроса.Некоторые данные опроса были потеряны, и теперь мне нужно восстановить эти данные.Резервное копирование данных выполняется в форматах csv и xls .
Модель, подобная приведенной ниже, сохраняет данные в разных форматах.
class Forms(models.Model):
xform = models.ForeignKey(XForm, related_name="fshistory")
date = models.DateTimeField(auto_now=True)
xls = models.FileField(upload_to=upload_to, null=True)
json = models.TextField(default=u'')
description = models.TextField(default=u'', null=True)
xml = models.TextField()
id_string = models.CharField(editable=False, max_length=255)
title = models.CharField(editable=False, max_length=255)
uuid = models.CharField(max_length=32, default=u'')
version = models.CharField(max_length=255, default=u'')
xml и json , сохраненные в приведенной выше модели, были созданы с использованием pyxform (https://github.com/XLSForm/pyxform).
from pyxform.builder import create_survey_from_xls
survey = create_survey_from_xls(xls_file)
xml = survey.to_xml()
Проблема заключается вчто я только смог преобразовать файлы xls с использованием pyxform в xml. Другие данные, которые хранятся в формате csv , не могут быть напрямую преобразованы в xml, поэтому мне нужно преобразовать их вСначала xls.
Итак, мне нужно знать, есть ли у pyxform какой-либо модуль для преобразования csv в xls, или есть ли другой способ сделать это и получить правильный xml-файл?
IЯ пробовал другие методы для преобразования CSV в XLS, как:
for filename in os.listdir(xls_directory):
if os.path.isfile(os.path.join(xls_directory,filename)):
if filename.endswith(".csv"):
wb = openpyxl.Workbook()
ws = wb.active
xls_file = open(os.path.join(xls_directory, filename))
reader = csv.reader(xls_file, delimiter=str(u';').encode('utf-8'))
for row in reader:
ws.append(row)
wb.save(''+filename.replace('.csv', '.xls'))
print('File saved')
Если я использую survey = create_survey_from_xls(xls_file)
в файлах XLS, созданных из приведенного выше кода, он выдает ошибку как:
Traceback (most recent call last):
File "manage.py", line 24, in <module>
execute_from_command_line(sys.argv)
File "/home/sanip/.virtualenvs/kobocat/lib/python2.7/site-packages/django/core/management/__init__.py", line 354, in execute_from_command_line
utility.execute()
File "/home/sanip/.virtualenvs/kobocat/lib/python2.7/site-packages/django/core/management/__init__.py", line 346, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/home/sanip/.virtualenvs/kobocat/lib/python2.7/site-packages/django/core/management/base.py", line 394, in run_from_argv
self.execute(*args, **cmd_options)
File "/home/sanip/.virtualenvs/kobocat/lib/python2.7/site-packages/django/core/management/base.py", line 445, in execute
output = self.handle(*args, **options)
File "/home/sanip/naxa/source/fieldsight/onadata/apps/fsforms/management/commands/create_xform_history.py", line 82, in handle
survey = create_survey_from_xls(xls_file)
File "/home/sanip/.virtualenvs/kobocat/lib/python2.7/site-packages/pyxform/builder.py", line 295, in create_survey_from_xls
excel_reader = SurveyReader(path_or_file)
File "/home/sanip/.virtualenvs/kobocat/lib/python2.7/site-packages/pyxform/xls2json.py", line 1176, in __init__
path, warnings=self._warnings, file_object=self._file_object)
File "/home/sanip/.virtualenvs/kobocat/lib/python2.7/site-packages/pyxform/xls2json.py", line 1090, in parse_file_to_json
workbook_dict, default_name, default_language, warnings)
File "/home/sanip/.virtualenvs/kobocat/lib/python2.7/site-packages/pyxform/xls2json.py", line 327, in workbook_to_json
u"The survey sheet is either empty or missing important "
pyxform.errors.PyXFormError: The survey sheet is either empty or missing important column headers.
Может ли кто-нибудь дать мне какую-то идею здесь?