问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

怎样将xlsx文件用Python脚本转成csv文件编码为UTF-8

发布网友 发布时间:2022-04-21 09:04

我来回答

2个回答

懂视网 时间:2022-04-18 17:44

本篇文章给大家带来的内容是关于python脚本如何将Excel文件转为csv文件(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

#!/usr/bin/env python 
__author__ = "lrtao2010" 
'''
Excel文件转csv文件脚本
需要将该脚本直接放到要转换的Excel文件同级目录下
支持xlsx 和 xls 格式
在同级目录下生成名为excel_to_csv.csv 的文件,采用UTF-8编码
'''
import xlrd
import csv
import os
#生成的csv文件名
csv_file_name = 'excel_to_csv.csv'
def get_excel_list():
 #获取Excel文件列表
 excel_file_list = []
 file_list = os.listdir(os.getcwd())
 for file_name in file_list:
 if file_name.endswith('xlsx') or file_name.endswith('xls'):
  excel_file_list.append(file_name)
 return excel_file_list
def get_excel_header(excel_name_for_header):
 #获取表头,并将表头全部变为小写
 workbook = xlrd.open_workbook(excel_name_for_header)
 table = workbook.sheet_by_index(0)
 #row_value = table.row_values(0)
 row_value = [i.lower() for i in table.row_values(0)]
 return row_value
def read_excel(excel_name):
 #读取Excel文件每一行内容到一个列表中
 workbook = xlrd.open_workbook(excel_name)
 table = workbook.sheet_by_index(0) #读取第一个sheet
 nrows = table.nrows
 ncols = table.ncols
 # 跳过表头,从第一行数据开始读
 for rows_read in range(1,nrows):
 #每行的所有单元格内容组成一个列表
 row_value = []
 for cols_read in range(ncols):
  #获取单元格数据类型
  ctype = table.cell(rows_read, cols_read).ctype
  #获取单元格数据
  nu_str = table.cell(rows_read, cols_read).value
  #判断返回类型
  # 0 empty,1 string, 2 number(都是浮点), 3 date, 4 boolean, 5 error
  #是2(浮点数)的要改为int
  if ctype == 2:
  nu_str = int(nu_str)
  row_value.append(nu_str)
 yield row_value
def xlsx_to_csv(csv_file_name,row_value):
 #生成csv文件
 with open(csv_file_name, 'a', encoding='utf-8',newline='') as f: #newline=''不加会多空行
 write = csv.writer(f)
 write.writerow(row_value)
if __name__ == '__main__':
 #获取Excel列表
 excel_list = get_excel_list()
 #获取Excel表头并生成csv文件标题
 xlsx_to_csv(csv_file_name,get_excel_header(excel_list[0]))
 #生成csv数据内容
 for excel_name in excel_list:
 for row_value in read_excel(excel_name):
  xlsx_to_csv(csv_file_name,row_value)
 print('Excel文件转csv文件结束 ')

热心网友 时间:2022-04-18 14:52

策划的配置表为 xlsx 表格,可以有注释,公式。
服务器和客户端使用的配置文件需要转成 csv 文件。
使用 WPS 另存无法批量转换,并且结果不是utf8编码的,还需要用Notepad++转编码。

除了 xlsx 转为 csv, 其他格式文件保持原样,如 *.ini, *.xml, *.lua.
server/ 子目录特殊处理,不能复制到客户端。

用python脚本实现,依赖 openpyxl 库。

#!/usr/bin/env python
# coding: utf-8
# datatab.py
# 从策划配置表目录 game\Design\配置表\”
# 生成服务器的 game\Program\server\six\datatab\” 目录,
# 和客户端的 game\Program\client\Assets\Config\” 目录。
# 所有xlsx文件生成csv文件,其他文件原样复制。
# 其中 server\ 目录特殊处理,仅对服务器有效,客户端跳过。
#
# 依赖openpyxl库:http://openpyxl.readthedocs.org/en/latest/
# 参考代码 http://segmentfault.com/q/1010000003006437?_ea=273128
# 测试环境:Python3.4

# Usage: datatab.py <game dir>
# Example: datatab.py "d:\game"
# <game dir> 是根目录,包含Design/, Program/ 目录。

from openpyxl import Workbook
from openpyxl.compat import range
from openpyxl.cell import get_column_letter
from openpyxl import load_workbook
import csv
import os
import sys
import shutil

def xlsx2csv(filename):
# try:
xlsx_file_reader = load_workbook(filename = filename, data_only = True)
for sheet in xlsx_file_reader.get_sheet_names():
# 仅第1个sheet输出到一个csv文件中,文件名后缀替换为.csv
csv_filename = os.path.splitext(filename)[0] + '.csv'
csv_file = open(csv_filename, 'w', encoding='utf8', newline='')
csv_file_writer = csv.writer(csv_file)
sheet_ranges = xlsx_file_reader[sheet]
for row in sheet_ranges.rows:
row_container = []
for cell in row:
row_container.append(cell.value)
csv_file_writer.writerow(row_container)
# End of for row.
csv_file.close()
break # 仅输出第1个sheet
# End of for sheet.
# End of try.
# except Exception as e:
# print(e)
# End of xlsx2csv().

def datatab_convert(game_dir):
'''从 game\Design\配置表\ 输出到
game\Program\server\six\datatab\
game\Program\client\Assets\Config\
'''
design_dir = os.path.join(game_dir, 'Design/配置表/')
server_dir = os.path.join(game_dir, 'Program/server/six/datatab/')
client_dir = os.path.join(game_dir, 'Program/client/Assets/Config/')

# 删除旧文件。
print("Delete " + server_dir)
try:
shutil.rmtree(server_dir)
except:
pass
print("Delete " + client_dir)
try:
shutil.rmtree(client_dir)
except:
pass

# 生成server文件
print("Creating " + server_dir)
shutil.copytree(design_dir, server_dir)
files = get_files(server_dir)
convert_files(files)

# 复制client文件
print("Copy " + client_dir)
shutil.copytree(server_dir, client_dir)
shutil.rmtree(os.path.join(client_dir, 'server/'))
print("Done. Total files: %d" % len(files))
# End of datatab_convert().

def get_files(dir):
'''Get a list of files under input dir.'''
result = []
for root,dirs,files in os.walk(dir):
for f in files:
result.append(os.path.join(root, f))
return result
# End of get_files().

def convert_files(files):
'''转换一批文件.
files 是列表,元素为完整路径名。
'''
for f in files:
ext = os.path.splitext(f)[1].lower()
if '.xlsx' != ext:
print(f + " -> keep")
continue
print(f + " -> csv")
xlsx2csv(f)
os.remove(f)
# End of convert_files().

if __name__ == '__main__':
if len(sys.argv) != 2:
print('usage: datatab <game dir>')
else:
datatab_convert(sys.argv[1])
sys.exit(0)

# Usage: datatab.py <game dir>
# Example: datatab.py "d:\game"
# <game dir> 是SVN根目录,包含Design/, Program/ 目录。

为方便使用,将datatab.py 打包成 exe, 这样不能安装Python就能运行。
下载并安装Python3, 安装openpyxl包,保证本地可以运行 datatab.py.
下载并安装PyInstaller:
pip install pyinstaller
运行
pyinstaller --onefile datatab.py

ImportError: No mole named 'jdcal'
可能openpyxl安装时自带的jdcal无法找到,删除
C:\Python34\Lib\site-packages\jdcal-1.0-py3.4.egg
重新安装:pip install jdcal
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
怎么样制作个人简历 上海海事大学对外交流多麽出国会不会容易一些 上海海事大学提前批今年要几号才能出来 怎么查找大学家长群 北京慧学堂在线教育学校的老师打电话来说要交3480元钱,给孩子半年的在... 左脸颊长青春痘是什么原因? 某商店上午9:00开始营业全天营业8小时下午几点关门 (2012?泗县模拟)某商店每天10:00-18:00营业,全天营业88小时. 某商店每天9:20-18:00营业,全天营业()小时。老师早上7:30到校,下午4... 商场营业时间是上午8:00-下午6:00,一位顾客向一位老先生嗯打听时间了... opencsv怎么生成UTF-8编码的CSV文件 WPS里文件为什么没有csvutf-8格式 java UTF-8中文导出为csv文件直接打开后乱码 怎么将EXCEL文件转换成utf8编码的csv文件 关于将Excel导出成UTF-8编码的csv文件的问题? 如何将UTF-8编码的CSV文件转换为GBK编码 Excel另存CSV文件不能选择UTF-8编码吗? 为什么excel不能正确处理utf8 csv csv 文件中,打开发现汉字显示为乱码,如何解决 如何将EXCEL文件转换成utf8编码的csv文件 Excel另存CSV文件为什么不能选择UTF-8编码 csv文件如何查看是否utp-8 “如何”“怎样”“怎么样”的区别是什么? 怎样导出csv文件是UTF-8编码 CSV 如何转换成UTF8编码? 苹果apple id怎么注册网站 怎么注册Apple ID账号 苹果帐号怎么注册 申请苹果id账号官网 怎么申请苹果id账号 php读取 unicode编码的 csv 文件为utf-8编码 我的如果在别人的手机上登录会看到我的聊天记录吗? qq我的名片怎么设置 QQ我的名片怎么可以自定义背景 手机qq我的名片夹在哪里 我的名片夹怎么用 qq个性名片怎么自义定 HTC one x QQ中我的名片怎么自定义背景? 手机qq我的名片在哪里 安卓手机QQ2012我的名片怎么自定义背景 手机qq名片怎么设置权限 不想让陌生人进来看 网络工程师培训什么内容? w10系统怎么看已连上的wifi密码 qq邮箱怎么设置我的名片 win10如何查询wi-fi密码 404 Not Found win10如何查看无线网络密码 手机QQ 在我的名片的页面怎么把头像换到中间去? 网络工程师培训是什么?杭州网络工程师培训哪家口碑好 清华IT网络工程师的培训怎么样?