Python代码将目录中的所有xlsx文件更改为CSV损坏原始文件

时间:2017-03-10 20:41:30

标签: python python-3.x pandas

我正在编写一个python代码,用于将目录中的所有文件更改为csv,然后使用具有NaN值的行填充缺少的时间戳并保存到新文件。代码正在运行,但由于某种原因它正在破坏我的原始文件。

尝试打开原始文件时出现Excel错误

  

“excel无法打开   文件,因为文件格式或扩展无效。验证   文件尚未损坏,扩展名与。的格式匹配   文件“

以下是我正在使用的代码

import os, re
import pandas as pd
import numpy as np

inputdirectory = input('Enter the directory: ')
directory = os.listdir(inputdirectory)
os.chdir(inputdirectory)

for file in directory:
    data_xls = pd.read_excel(file, 'Sheet2', index_col=None)
    data_xls.to_csv(file, encoding='utf-8', index=False)
    df = pd.read_csv(file, index_col="DateTime", parse_dates=True)
    df = df.resample('1min').mean()
    df = df.reindex(pd.date_range(df.index.min(), df.index.max(), freq="1min"))
    df.to_csv(os.path.basename(file) + "-processed.csv", index=True, index_label="DateTime", na_rep='NaN')

1 个答案:

答案 0 :(得分:5)

data_xls = pd.read_excel(file, 'Sheet2', index_col=None)
data_xls.to_csv(file, encoding='utf-8', index=False)

表示您使用xlsx文件名转储csv数据。

Excel无法识别它的csv,因为扩展名为xlsx并且文件显示为损坏(实际上这样做会丢失数据:重命名回.csv可以读取数据,但是你丢失格式,其他表格,如果有的话......)。但是大熊猫很高兴地回读你的csv数据,即使它被称为.xlsx,所以你认为你的代码工作正常。

解决方案:为该临时文件使用其他名称。

我谦虚的非专家解决方案:

import glob,os

inputdirectory = input('Enter the directory: ')

for xls_file in glob.glob(os.path.join(inputdirectory,"*.xls*")):
    data_xls = pd.read_excel(xls_file, 'Sheet2', index_col=None)
    csv_file = os.path.splitext(xls_file)[0]+".csv"
    data_xls.to_csv(csv_file, encoding='utf-8', index=False)

作为奖励,脚本不使用os.chdir并仅处理xls个文件。它对.csv临时文件使用相同的基数名称,但不会覆盖.xls文件。

除此之外:我不是大熊猫专家,但我确信这个临时文件可以以某种方式避免。