目录
前言
西瓜WiFi初来乍到,数据清洗入门,规范文件格式,特此总结。收到的文件中以excel xls和xlsx为主,其中夹杂着csv,jpg和png,清洗完数据统一为xlsx格式,导入系统。
提示:以下是本篇文章正文内容,下面案例可供参考
第一版 文件夹下所有xls转换为xlsx格式
知识点:
os.walk() 遍历文件夹;
os.path.join()合并路径;
os.path.spiltext()分解扩展名;
os.remove()删除文件;
pd.read_excel()pandas读xls;
to_excel()pandas写入xlsx;
代码:
import os
import pandas as pd
def xls_save_as_xlsx(data_path):
for dirpath,dirname,filenames in os.walk(data_path): #os.walk()遍历文件
for fname in filenames:
file_name=os.path.join(dirpath,fname) #os.path.join()合并路径
folder,name=os.path.splitext(file_name) #分解扩展名
if file_name.endswith('.xls'):
df=pd.read_excel(file_name) #pandas读xls文件
df.to_excel(f"{folder}.xlsx",index=False) #pandas写入xlsx
print(f'{file_name} 转换成功啦!O(∩_∩)O哈哈~')
print('-----------------------------------------------------------------------------------------------------------')
os.remove(file_name) #删除原xls文件
print('finisded...')
data_path=r"C:\Users\GDY\Desktop\测试" #文件路径
xls_save_as_xlsx(data_path) #调用一下,转换完成
测试:
第二版 文件夹下所有csv转换为xlsx格式
os.walk() 遍历文件夹;
os.path.join()合并路径;
os.path.spiltext()分解扩展名;
os.remove()删除文件;
pd.read_csv()pandas读xls;
to_excel()pandas写入xlsx;
csv指定encoding
代码:
import os
import pandas as pd
def csv_save_as_xlsx(data_path):
for dirpath,dirname,filenames in os.walk(data_path): #os.walk()遍历文件
for fname in filenames:
file_name=os.path.join(dirpath,fname) #os.path.join()合并路径
if file_name.endswith('.csv'):
df=pd.read_csv(file_name)
floder,name=os.path.splitext(file_name) #分割后缀
df.to_excel(f"{floder}.xlsx",index=False)
print(f'{file_name} 转换成功啦!O(∩_∩)O哈哈~')
print('-----------------------------------------------------------------------------------------------------------')
os.remove(file_name)
print('finished...')
data_path=r"C:\Users\GDY\Desktop\测试"
csv_save_as_xlsx(data_path) #调用一下,转换完成
测试:
说明:pandas 读取csv,需要指定编码方式,python默认编码方式是 UTF-8 ,个人理解csv编码可是UTF-8和GBK ,是GBK的时候需要指定encoding='gbk'
第三版 增加窗口组件,csv,xls转化为xlsx
知识点:
os库的基本用法;
pandas库的读写;
win32com打开窗口;
代码:
import os
import pandas as pd
import easygui as eg
# xls文件转xlsx
def xls_save_as_xlsx(file_name):
df=pd.read_excel(file_name) #pandas读xls文件
file,name=os.path.splitext(file_name) #分解扩展名
df.to_excel(f"{file}.xlsx",index=False) #pandas写入xlsx
print(f'{file_name} 转换成功啦!O(∩_∩)O哈哈~')
print('-----------------------------------------------------------------------------------------------------------')
os.remove(file_name) #删除原xls文件
#csv文件转xlsx
def csv_save_as_xlsx(file_name):
df=pd.read_csv(file_name) #pandas读xls文件
file,name=os.path.splitext(file_name) #分解扩展名
df.to_excel(f"{file}.xlsx",index=False)
print(f'{file_name} 转换成功啦!O(∩_∩)O哈哈~')
print('-----------------------------------------------------------------------------------------------------------')
os.remove(file_name) #删除原csv文件
#打开窗口,选择一个文件夹
def pick_package():
return eg.diropenbox()
if __name__ == "__main__":
print('欢迎来到文件转换系统,程序正在启动...')
print('请选择要转换的文件夹')
data_path=pick_package()
for dirpath,dirname,filenames in os.walk(data_path): #os.walk()遍历文件
for fname in filenames:
file_name=os.path.join(dirpath,fname) #os.path.join()合并路径
if file_name.endswith('.xls'):
xls_save_as_xlsx(file_name)
elif file_name.endswith('.csv'):
csv_save_as_xlsx(file_name)
else:
print(f'跳过非xls文件:{file_name}')
input('输入任意键退出')
print('finished...')
测试:
转换前:
运行效果:
转换后:
总结
常言道,好事多磨,通过os标准库,pandas库可以实现xls,xlsx,csv文件格式的相互转化。pandas是数据清洗分析的利器,可以实现各种复杂的操作,茅庐小子对python的探索才刚刚开始,多琢磨方能见真章。
感谢您百忙之中的赏读,希望能有所收获,客官,点赞留言再走呗~或者一起探讨。。。