Python: Pyxform конвертировать CSV в XLS - PullRequest
0 голосов
/ 16 мая 2019

У меня есть система в Джанго, которая используется для хранения данных опроса.Некоторые данные опроса были потеряны, и теперь мне нужно восстановить эти данные.Резервное копирование данных выполняется в форматах 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.

Может ли кто-нибудь дать мне какую-то идею здесь?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...