Создать CSV-файл, который Excel не будет изменять данные при открытии - PullRequest
0 голосов
/ 20 мая 2019

Я программно создаю CSV-файлы, используя Python. Многие конечные пользователи открывают и взаимодействуют с этими файлами с помощью Excel. Проблема в том, что Excel по умолчанию изменяет многие строковые значения в файле. Например, Excel преобразует 0123> 123.

Значения, записываемые в CSV, правильные и отображаются правильно, если я открою их с помощью другой программы, например, Блокнота. Если я открою файл в Excel, сохраню его, а затем открою его с помощью блокнота, файл теперь содержит неверные значения.

Я знаю, что у конечного пользователя есть способы изменить свои настройки Excel, чтобы отключить это поведение, но попросить каждого пользователя сделать это невозможно в моей ситуации.

Есть ли способ создать CSV-файл с использованием Python, который по умолчанию копия Excel не будет изменять значения?

Редактировать: хотя эти файлы часто открываются в Excel, они открываются не только в Excel и должны выводиться как .csv, а не .xlsx.

Ответы [ 3 ]

1 голос
/ 21 мая 2019

Короткий ответ - нет, невозможно создать один CSV, который будет отображать (произвольные) данные одинаково в Excel и в программах, не относящихся к Excel.

Есть запутанных способовзаставить строки отображаться так, как вы хотите, когда вы открываете CSV в Excel , но тогда программы, отличные от Excel, почти наверняка не отобразят их так, как вы хотите.

Хотя выскажем, вы должны придерживаться CSV из-за не-Excel программ, вы не говорите, что это за программы.Если возможно, что в конце концов они могут открывать файлы .xlsx, то .xlsx будет лучшим выбором.

0 голосов
/ 21 мая 2019

Вы пытались явно отформатировать соответствующий столбец (столбцы) в 'str' перед экспортом?

df['column_ex'] = df['column_ex'].astype('str')

df.to_csv('df_ex.csv')

Другой обходной путь может заключаться в том, чтобы открыть программу Excel (не файл), перейти в меню «Данные», а затем «Импорт формы текста». Утилита импорта Excel даст вам возможность определить тип данных каждого столбца. Я считаю, что офис Apache в Liibre по умолчанию удерживает лидирующие позиции, а Excel - нет.

0 голосов
/ 20 мая 2019

Решение - объявить тип данных во время записи файла.Кажется, что Excel пытается быть умным и преобразует весь столбец в числовой тип.Вывод должен быть записан непосредственно в формат .xlsx, например:

import pandas as pd
writer = pd.ExcelWriter('path/to/save.xlsx')
data = {'x':['011','012','013'],'y':['022','033','041']}
Df = pd.DataFrame(data = data)
Df.to_excel(writer,"Sheet1")
writer.save()

Источник: https://stackoverflow.com/a/31136119/8819895

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