web-dev-qa-db-ja.com

Excelにデータを書き込むと、「Zipは1980年より前のタイムスタンプをサポートしていません」

重複を作成したくないのですが、周りを見回して(スタックオーバーフローや他のフォーラム)、同様の質問を見つけましたが、どれも私の問題を解決しませんでした。

私はpythonコードを持っていますが、それはDBにクエリを実行し、PandasでDataFrameを作成し、それをExcelファイルに書き込むことだけです。

コードはローカルで問題なく機能しましたが、サーバーに導入すると、次のエラーが発生し始めます。

  File "Test.py", line 34, in <module>
    test()
  File "Test.py", line 31, in test
    ex.generate_file()
  File "/home/carlo/Test/Utility/ExportExcell.py", line 96, in generate_file
    writer.save()
  File "/usr/local/lib/python2.7/dist-packages/pandas/io/Excel.py", line 1952, in save
    return self.book.close()
  File "/usr/local/lib/python2.7/dist-packages/xlsxwriter/workbook.py", line 306, in close
    self._store_workbook()
  File "/usr/local/lib/python2.7/dist-packages/xlsxwriter/workbook.py", line 677, in _store_workbook
    xlsx_file.write(os_filename, xml_filename)
  File "/usr/lib/python2.7/zipfile.py", line 1135, in write
    zinfo = ZipInfo(arcname, date_time)
  File "/usr/lib/python2.7/zipfile.py", line 305, in __init__
    raise ValueError('Zip does not support timestamps before 1980')
ValueError: Zip does not support timestamps before 1980

それがすべて問題ないことを確認するために、私はDataFrameを印刷しました。ローカルで実行すると、問題なくexcellファイルが生成されるため、見栄えがよくなります。

   Computer_System_Memory_Size  Count_of_HostName   Disk_Total_Size  Number_of_CPU       OS_Family
0                5736053088256                 70     6072238035456         282660         Windows
1                  96159653888                607       96630589440        2451066         vCenter
2                            0                  9                 0          36342  Virtualization
3             2469361287143424                 37  2389533519619072         149406            Unix
4                3691651514368                 90     5817485303808         363420           Linux

ここにタイムスタンプが表示されません。これは私のコードの一部です。

pivot = pd.DataFrame.from_dict(pivot) #pivot= information extracted from DB

pd.to_numeric(pivot['Count_of_HostName'], downcast='signed')#try to enforce to be a numeric value in case it get confused with a datetime
pd.to_numeric(pivot['Disk_Total_Size'], downcast='signed')#try to enforce to be a numeric value in case it get confused with a datetime
pd.to_numeric(pivot['Computer_System_Memory_Size'], downcast='signed')#try to enforce to be a numeric value in case it get confused with a datetime
pd.to_numeric(pivot['Number_of_CPU'], downcast='signed')#try to enforce to be a numeric value in case it get confused with a datetime

print pivot
name = 'TempReport/Report.xlsx'#set-up file name
writer = pd.ExcelWriter(name, engine='xlsxwriter')#create Excel with file name
pivot.to_Excel(writer, 'Pivot', index=False)#introduce my data to Excel
writer.save()#write to file, it's where it fail

「Zipは1980年以前のタイムスタンプをサポートしていません」というエラーが表示されない限り、Ubuntu 16.04サーバーで機能しない理由を誰かが知っていますか?私は多くのこと、ライブラリのバージョンをチェックし、データがないことを確認しました

5
Carlo 1585

この問題はXlsxWriter 1.2.1で修正されています!

1
eusoubrasileiro

このエンジンを使用してみてください:

pd.to_Excel('file_name.xlsx', engine = 'openpyxl')
1
andrecdazevedo