58 lines
2.2 KiB
Python
58 lines
2.2 KiB
Python
|
|
import csv
|
|||
|
|
|
|||
|
|
def format_value(val):
|
|||
|
|
"""格式化值:整数保持原样,小数保留3位"""
|
|||
|
|
try:
|
|||
|
|
num_val = float(val)
|
|||
|
|
if num_val.is_integer():
|
|||
|
|
return int(num_val)
|
|||
|
|
return round(num_val, 3)
|
|||
|
|
except ValueError:
|
|||
|
|
return val
|
|||
|
|
|
|||
|
|
def csv_to_ini(csv_file, ini_file):
|
|||
|
|
"""
|
|||
|
|
将CSV文件转换为INI格式
|
|||
|
|
:param csv_file: 输入的CSV文件路径
|
|||
|
|
:param ini_file: 输出的INI文件路径
|
|||
|
|
"""
|
|||
|
|
try:
|
|||
|
|
with open(csv_file, 'r', newline='', encoding='utf-8') as csv_input:
|
|||
|
|
# 读取CSV文件
|
|||
|
|
reader = csv.DictReader(csv_input)
|
|||
|
|
|
|||
|
|
# 确定所需字段
|
|||
|
|
required_fields = ['name', 'x', 'y', 'z', 'u', 'v', 'w',
|
|||
|
|
'id', 'order', 'lineid', 'status', 'linetype']
|
|||
|
|
|
|||
|
|
with open(ini_file, 'w', encoding='utf-8') as ini_output:
|
|||
|
|
# 处理每一行数据
|
|||
|
|
for row in reader:
|
|||
|
|
# 检查是否所有必需字段都存在
|
|||
|
|
if not all(field in row for field in required_fields):
|
|||
|
|
missing = [field for field in required_fields if field not in row]
|
|||
|
|
print(f"警告: 行 {reader.line_num} 缺少字段 {', '.join(missing)},跳过该行")
|
|||
|
|
continue
|
|||
|
|
|
|||
|
|
# 写入section头
|
|||
|
|
ini_output.write(f"[{row['name']}]\n")
|
|||
|
|
|
|||
|
|
# 写入数值字段
|
|||
|
|
for field in required_fields[1:]: # 跳过name字段
|
|||
|
|
formatted = format_value(row[field])
|
|||
|
|
ini_output.write(f"{field} = {formatted}\n")
|
|||
|
|
|
|||
|
|
# 区块间添加空行
|
|||
|
|
ini_output.write("\n")
|
|||
|
|
|
|||
|
|
print(f"转换成功!INI文件已保存至: {ini_file}")
|
|||
|
|
|
|||
|
|
except Exception as e:
|
|||
|
|
print(f"处理过程中出错: {str(e)}")
|
|||
|
|
|
|||
|
|
if __name__ == "__main__":
|
|||
|
|
# 在此输入您的文件路径
|
|||
|
|
input_csv = "D:/aa.csv" # 替换为实际CSV文件路径
|
|||
|
|
output_ini = "D:/output.ini" # 输出的INI文件路径
|
|||
|
|
|
|||
|
|
csv_to_ini(input_csv, output_ini)
|