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

Python代码,用于将目录中的所有xlsx文件更改为CSV,从而损坏原始文件,python,python-3.x,pandas,Python,Python 3.x,Pandas,我正在编写一个python代码,将目录中的所有文件更改为csv,然后用一行NaN值填充丢失的时间戳,并保存到一个新文件中。代码正在工作,但由于某种原因,它正在损坏我的原始文件 试图打开原始文件时出现Excel错误 “excel无法打开 文件格式或扩展名无效。请验证 文件尚未损坏,扩展名与的格式匹配 “文件” 这是我正在使用的代码 import os, re import pandas as pd import numpy as np inputdirectory = input('Enter

我正在编写一个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')
表示您正在使用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文件

旁白:我不是熊猫专家,但我相信这个临时文件是可以避免的

表示您正在使用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文件


旁白:我不是熊猫专家,但我相信这个临时文件是可以避免的。

它保存到的csv文件正在工作,但当我尝试打开原始xlsx数据文件时,它不允许我打开。这是因为熊猫可以从损坏的xlsx文件中读取csv数据,就像您指定的csv格式。谢谢您,这工作得很好。与os.chdir相比,使用glob的优势是什么?首先,
glob
过滤模式,其次,它提供绝对路径,因此您不必使用chdir。更改目录并不是很好,因为如果使用相对路径,并且执行两次,第二次就会失败。另外,调用者不知道这个目录发生了变化,这破坏了OO编程/封装。比我在SET上找到的其他示例要好得多。它保存到的csv文件正在工作,但当我尝试打开原始xlsx数据文件时,它不允许我打开。这是因为熊猫可以从损坏的xlsx文件中读取csv数据,就像您指定的csv格式。谢谢您,这非常有效。与os.chdir相比,使用glob的优势是什么?首先,
glob
过滤模式,其次,它提供绝对路径,因此您不必使用chdir。更改目录并不是很好,因为如果使用相对路径,并且执行两次,第二次就会失败。另外,调用者不知道这个目录发生了变化,这破坏了OO编程/封装。比我在SE上找到的其他示例要好得多