84 lines
3.4 KiB
Python
84 lines
3.4 KiB
Python
import pandas as pd
|
||
import os
|
||
import csv
|
||
|
||
def is_valid_sheet(df):
|
||
if df.empty:
|
||
return False
|
||
# 过滤“全空行”的工作表
|
||
return not df.dropna(how='all').empty
|
||
|
||
def convert_excel_to_txt(folder_path='.'):
|
||
# 计数器,用于最后汇总
|
||
count = 0
|
||
# 固定从脚本所在目录读取,避免受运行时工作目录影响
|
||
script_dir = os.path.dirname(os.path.abspath(__file__))
|
||
scan_dir = script_dir if folder_path in ('.', '') else os.path.abspath(folder_path)
|
||
target_dir = os.path.join(os.path.dirname(__file__), '../Assets/GameMain/DataTables')
|
||
target_dir = os.path.abspath(target_dir)
|
||
|
||
# 确保目标目录存在
|
||
os.makedirs(target_dir, exist_ok=True)
|
||
|
||
for root, _, files in os.walk(scan_dir):
|
||
for file_name in files:
|
||
# 跳过 Excel 打开时生成的临时锁文件
|
||
if file_name.startswith('~$'):
|
||
continue
|
||
if file_name.endswith(('.xlsx', '.xls')):
|
||
file_path = os.path.join(root, file_name)
|
||
base_name = os.path.splitext(file_name)[0]
|
||
|
||
print(f"正在处理: {file_path}...")
|
||
|
||
try:
|
||
# 读取 Excel 中所有有效 Sheet
|
||
excel_file = pd.ExcelFile(file_path)
|
||
valid_sheets = []
|
||
for sheet_name in excel_file.sheet_names:
|
||
df = pd.read_excel(excel_file, sheet_name=sheet_name, header=None)
|
||
if is_valid_sheet(df):
|
||
valid_sheets.append((sheet_name, df))
|
||
|
||
if not valid_sheets:
|
||
print(f"未找到有效 Sheet,跳过: {file_path}")
|
||
continue
|
||
|
||
use_sheet_name_as_file_name = len(valid_sheets) > 1
|
||
|
||
for sheet_name, df in valid_sheets:
|
||
output_name = sheet_name if use_sheet_name_as_file_name else base_name
|
||
output_file = os.path.join(target_dir, f"{output_name}.txt")
|
||
|
||
# 预处理:将 NaN 替换为空字符串,否则导出会变成 "nan"
|
||
df = df.fillna('')
|
||
|
||
# 导出设置:
|
||
# 1. sep='\t' : 使用制表符分隔
|
||
# 2. quoting=csv.QUOTE_NONE : 不使用引号包裹字段,也不会把 " 变成 ""
|
||
# 3. escapechar='\\' : 如果单元格内恰好有 Tab 键,会用反斜杠转义,防止数据列错位
|
||
df.to_csv(
|
||
output_file,
|
||
sep='\t',
|
||
index=False,
|
||
header=False,
|
||
encoding='utf-8',
|
||
quoting=csv.QUOTE_NONE,
|
||
escapechar='\\'
|
||
)
|
||
|
||
print(f"成功转换 -> {output_file} (Sheet: {sheet_name})")
|
||
count += 1
|
||
|
||
except Exception as e:
|
||
print(f"处理 {file_path} 时出错: {e}")
|
||
|
||
print(f"\n任务完成!共转换了 {count} 个文件。")
|
||
|
||
if __name__ == "__main__":
|
||
convert_excel_to_txt('.')
|
||
|
||
# --- 关键修改:在这里添加暂停 ---
|
||
print("\n" + "="*30)
|
||
input("按回车键(Enter)退出程序...")
|